電子書籍の厳選無料作品が豊富!

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

A 回答 (4件)

もう少し詳しく説明した方が、回答がもらいやすいですよ。



外部ファイルとは?

推測で回答すると、マクロとあるので Excel のブックのことかな?
なら Run メソッドですかね、、、

手順としては、

 1. Workbooks.Open("ブックのフルパス") でそのファイルを開く
 2. Application.Run("ブック名!マクロ名,引数1,引数2,....,引数30)
   でマクロを実行

   Run メソッドについて VBA のヘルプを参照して下さい。

です。

外部ファイルとは「マクロが記述されたテキストファイル」というのは
あまり想像したくない、、

この回答への補足

いいえ、違います。
普通のマクロの所に
以下の様に記述(C言語を例に取ると)

Sub Macro1()
#include "excel_macro.txt"
End Sub

そして、excel_macro.txt のファイルに
以下のように記述したいのです。

Range("B2").Select
ActiveCell.FormulaR1C1 = "abc"
Range("B3").Select

理由は、複数のマクロで
全く同じプログラムが数行に渡ってあるので、
その全く同じプログラムの部分を、
外部ファイルとして一箇所にまとめて
呼び出すようにしたいのです。

補足日時:2006/06/02 22:28
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/06/03 18:03

> そして、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 では個々のプロシージャにおいて重複する部分があったと
しても、それぞれにきちんと書くか、これが非効率なのであれば、クラス
や標準モジュールでサブプロシージャにするしか方法はなさそうです。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2006/06/03 18:05

アドイン?かな


Excelでユーザー定義関数をアドインとして提供する
http://www.atmarkit.co.jp/fwin2k/win2ktips/471fu …

Excelでお仕事
http://www.asahi-net.or.jp/~ef2o-inue/haifu/sub0 …
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/06/03 18:04

外部ファイルって、それもエクセルですよね?


Workbooks.Open "C:\Book1.xls"
Application.Run "Book1.xls!test"
こんな感じで出来ると思います。
Book1.xlsのtestというモジュールを実行します。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/06/03 18:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!