• ベストアンサー

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

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

  • fa46
  • お礼率49% (261/527)

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

  • ベストアンサー
  • 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

  • エクセルを開いたときに実行するマクロ等を教えてください。

    前に、http://oshiete1.goo.ne.jp/qa4335365.html で質問させて頂きました。 その節は、お世話になりありがとうございます。 本件で2点、困った点がありますので ご教示何卒よろしくお願いいたします。 (1)回答No.5のargumentさんに教えて頂いた通りに コードを作成したつもりなのですが、 エクセルファイルを開くと同時にマクロが実行されません。 マクロの実行から、マクロをスタートさせれば 思い通りの結果になるのですが、 自分でマクロを実行させなければならず、 目的を達成でき兼ねております。 argumentさんのおっしゃる 「※以下は必ずVBE上のThinworkbookの中に書き込んでください。」 という意味が分からないでおりますので、 このことと関係があるかもしれません。 お手数ですが、エクセルファイルを開くと同時に マクロが始まる方法を素人向けにご教示頂けませんでしょうか。 (2)マクロを無効にされたら? エクセル2003の場合、ファイルを開くときに 「マクロを有効にしますか?」という メッセージボックスが出てきますが、 ここでマクロを無効にするを選ばれてしまったら、 せっかくマクロを用意して、すべてのシートが 削除されるようにしたのが無意味になってしまう気がしております。 マクロを有効にしないと、エクセル画面で 何もできないような方法はございませんでしょうか。 エクセル2007でも拡張子を変えられちゃったらどうしようと 心配でなりません。 この点、対処方法をご教示頂けませんでしょうか。 何卒、よろしくお願い申し上げます。

  • 【Excelマクロ】ファイルを開き、マクロを実行する方法を教えてください

    マクロをひとつのブックに保存してマクロボタンを作成しています。そのマクロを別のファイルに実行したいのですが、その記述がわかりません。 [ファイルを開く]ダイアログから指定したファイルを開き、その開いたファイルに対して、すでに別のブックに保存してあるマクロを実行するには、どのように記述したらよいのでしょうか? ご存知の方いらっしゃいましたら、よろしくお願いいたします。

  • Excel VBAでファイルを開くとマクロを実行させるにはどのように記

    Excel VBAでファイルを開くとマクロを実行させるにはどのように記述すればいいのでしょうか? 例えば、ファイルを開くと指定のセルの削除させるような。 よろしくお願いします。

  • エクセル2003のマクロが自動実行されてしまいます

    宜しくお願いいたします。 エクセル2003で、マクロ記録で作成したマクロを登録したのですが、そのファイルを開くと時、マクロを有効にするにすると作成したマクロが起動してしまいます。マクロを無効にすると、マクロが表示されなくなります。シフトをおしながら有効にする方法は、分かったのですが、マクロを有効にするにしても、開いた後に、手動で実行するまで、 止めておきたいのですが、設定方法は無いでしょうか?

  • エクセルマクロで行いたいのですが、できるのでしょうか?

    ネットワーク上にエクセルで作成したファィルが3つあるとします。 その3つのファイルに対してマクロの指示を実行させ(検索の種類を分ける)る方法って可能でしょうか? 例) (1)A付属品ファィル (2)B付属品ファィル (3)Cカートリッジ一覧ファィルがあるとします。 これを、新規のエクセルのシートに3種類の検索画面を作り、3つのファィルの検索は出来るのでしょうか? できる場合は新規のエクセルシートにだけ、マクロを記述すればよいのですか? どのようなマクロを作成し、どのシートに記述するのですか?教えてください。 教えてください。

  • Wordのアドインとマクロ実行について

    Wordのアドインとマクロ実行について Word2003を使用しています。 アドイン用のテンプレートファイルを作成し、アドインの追加まではできました。 アドインで記述したマクロを実行させたいのですが、記述方法がわかりませんでした。 Excelですと「ファイル名!関数名」で呼べるようですが、 Wordの場合、どのように記述すればアドインのマクロ処理を呼ぶことができるのでしょうか? (例.Word文書にボタンを追加してボタンがクリックされたら、アドインのマクロ処理が実行される等 処理をコードで記述したい) ご教授よろしくお願いたします。

  • エクセルマクロで外部ファイルを開きたい

    エクセルマクロで外部ファイルを開きたい エクセルのマクロをまだ詳しく知らないため、 ここで教えていただき一連の作業の最後にデータをクリップボードに 納めるところまでのマクロを作っていただきました。 そしてこのクリップされたデータをエディタソフト(Em-Editor)をその都度起動して張り付けています。 ついては使用中のマクロの中に外部ファイル(エディタ)を呼び出すところまでできれば 都合がいいのですが、手元にある解説書などを見ると ファイルの呼び出しマクロはエクセルのワークブックのことしか記述してありません。 外部ファイル(エディタ・新規)をマクロで呼び出すことは可能でしょうか。 WindowsXP-SP3/Excel2003/

  • AccessでExcelのマクロを実行させたい

    WinXpでAccess2002を使用しています。 今、Accessのマクロで、ExcelのAファイルを出力させましたが、この後、続けて、以降の処理を行うにはどのように記述すれば良いでしょうか? (1)ExcelのAファイルを開く。 (2)AファイルのマクロA-1を実行させる。

  • エクセルのマクロで別ファイル(エクセル)のマクロを実行させるには?

    エクセルにおいてマクロを組んでいます. 1.実行させたいマクロAが組んであるファイル(Aファイルとします)が多数あります。またマクロAはモジュール内(Module1)に作っております。 2.1のマクロAを別のエクセルファイル(Bファイルとします)のマクロBで実行させたい. 上記のようなことを行いたいのですが可能でしょうか?さらに言えば、マクロBによってマクロAのプロシージャを指定して実行させることは出来るでしょうか? 現在は、マクロBによってマクロAを組んであるAファイルを開き、Aファイルのマクロの中にファイルを開いたときにマクロAを実行させる(イベントドリブン)ようにしています. 直接、マクロBでAファイルのマクロAを動かせるようになればマクロAにイベントドリブンなコードを組む手間がなくなるので、なんとかそのような事が出来ないでしょうか? どうか、詳しい方ご教授ください。 よろしくお願いいたします。。。

  • マクロ実行後エクセルを閉じたい

    2つの別々のファイルを開いて片方からもう片方にコピーして 保存して終了する。(両方とも閉じる) というマクロを作ったのですが コピー終了後に実行したマクロ付きのエクセルも閉じてデスクトップ上には何も開いていない状態にしたいのですがworkbookのところに 下記の命令を記述してもうまくいきません。 Application.Run "XXXXXX" ThisWorkbook.Save ThisWorkbook.Saved = True If Workbooks.Count <= 1 Then Application.Quit ThisWorkbook.Close False マクロ付きのエクセルも一旦は閉じるのですがその後に 別の白紙のブックが開いてしまうのです。 続けて他のマクロをスケジュールで実行したいのですが実行時に 「既にエクセルが開いています」みたいな警告が表示され 実行できません。 エクセルを完全に閉じるようにするにはどうしたらいいのでしょうか?

専門家に質問してみよう