Q質問

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

質問者からの補足コメント

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

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

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

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

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

    No.1の回答に寄せられた補足コメントです。 補足日時:2006/06/02 22:28 通報する

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

この回答へのお礼

ありがとうございます。

お礼日時:2006/06/03 18:05
    • good
    • 0

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

Excelでお仕事
http://www.asahi-net.or.jp/~ef2o-inue/haifu/sub0 …

この回答へのお礼

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

お礼日時:2006/06/03 18:04
    • good
    • 0

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

この回答へのお礼

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

お礼日時:2006/06/03 18:04
    • good
    • 0

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

外部ファイルとは?

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

手順としては、

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

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

です。

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

この回答へのお礼

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

お礼日時:2006/06/03 18:03
    • good
    • 0

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

新しく質問する

このQ&Aを見た人が検索しているワード


このカテゴリの人気Q&Aランキング

おすすめ情報