• ベストアンサー

エクセルのマクロを記述したファイルを呼び出して実行

エクセルのマクロを記述した外部ファイルを作成しておいて メイン(普通)のマクロの実行中にそのファイルを読み込んで、 マクロを実行させることは可能でしょうか? 可能なら方法をお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.1

もう少し詳しく説明した方が、回答がもらいやすいですよ。 外部ファイルとは? 推測で回答すると、マクロとあるので Excel のブックのことかな? なら Run メソッドですかね、、、 手順としては、  1. Workbooks.Open("ブックのフルパス") でそのファイルを開く  2. Application.Run("ブック名!マクロ名,引数1,引数2,....,引数30)    でマクロを実行    Run メソッドについて VBA のヘルプを参照して下さい。 です。 外部ファイルとは「マクロが記述されたテキストファイル」というのは あまり想像したくない、、

fa46
質問者

お礼

ありがとうございます。 このやり方で出来ました。

fa46
質問者

補足

いいえ、違います。 普通のマクロの所に 以下の様に記述(C言語を例に取ると) Sub Macro1() #include "excel_macro.txt" End Sub そして、excel_macro.txt のファイルに 以下のように記述したいのです。 Range("B2").Select ActiveCell.FormulaR1C1 = "abc" Range("B3").Select 理由は、複数のマクロで 全く同じプログラムが数行に渡ってあるので、 その全く同じプログラムの部分を、 外部ファイルとして一箇所にまとめて 呼び出すようにしたいのです。

その他の回答 (3)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.4

> そして、excel_macro.txt のファイルに > 以下のように記述したいのです。 > Range("B2").Select > ActiveCell.FormulaR1C1 = "abc" > Range("B3").Select C は良くわかりませんが、Perl や PHP でもコードの重複部分を共通化 するため、その部分だけを外部ファイル(include ファイル)にするのは、 良く使われる手法ですよね。 結論から言えば、残念ながらこの用途で include ファイルを扱うことは VBA を含め VB では仕様上不可能です。 ご質問を拝見する限り、関数化(サブプロシージャ化)で対応できそうな 気がしますが、それではダメなのですか? 過去の Office では VBA で VBA のコードを書くことが可能だったので、  1. 外部テキストを読み込み  2. 一時モジュールを追加  3. 元のコードに読み込んだコードを追加し、プロシージャを書き出し  4. 書き出されたプロシージャ実行  5. 実行後一時モジュールを削除 みたいな流れでできたかもしれません、、、  # 実際にやったことはありません。 しかし、現在ではセキュリティー上の理由で VBA から VBA のプロジェクト にアクセスすることが禁止されてしまいました。 つまり、VBA では個々のプロシージャにおいて重複する部分があったと しても、それぞれにきちんと書くか、これが非効率なのであれば、クラス や標準モジュールでサブプロシージャにするしか方法はなさそうです。

fa46
質問者

お礼

ありがとうございます。

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.3

アドイン?かな Excelでユーザー定義関数をアドインとして提供する http://www.atmarkit.co.jp/fwin2k/win2ktips/471funcadin/funcadin.html Excelでお仕事 http://www.asahi-net.or.jp/~ef2o-inue/haifu/sub06_030.html

fa46
質問者

お礼

ありがとうございます。 参考になりました。

回答No.2

外部ファイルって、それもエクセルですよね? Workbooks.Open "C:\Book1.xls" Application.Run "Book1.xls!test" こんな感じで出来ると思います。 Book1.xlsのtestというモジュールを実行します。

fa46
質問者

お礼

ありがとうございます。 このやり方で出来ました。

関連するQ&A