• 締切済み

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

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

みんなの回答

noname#95859
noname#95859
回答No.5

小生も、昔、同じようなことを考えていました。小生の当時の悩みは、 マクロを起動するために、ボタンのあるシートをも前面に持ってくるも、 それでは、処理対象は、どう指定すればよいのか?? で、結局、今は、エクセルのメニューに自分用のコマンドボタンを追加してやっています。処理したいシートをActiveにした上で、コマンドボタンから 処理を選択するというものです。 具体的には、VBA editorに行って、 ThisWorkBookに下記のイベントプロシージャを記述します。 Private Sub Workbook_Open() Dim myCB As CommandBar Dim myCBCtrl As CommandBarControl On Error Resume Next Application.CommandBars("test1").Delete On Error GoTo 0 Set myCB = Application.CommandBars.Add(Name:="test1", Temporary:=True, Position:=msoBarTop) Set myCBCtrl = myCB.Controls.Add(Type:=msoControlPopup) myCBCtrl.Caption = "test1" Set myCBCtrl = myCB.Controls("test1").Controls.Add(Type:=msoControlButton) myCBCtrl.Caption = "処理1" myCBCtrl.OnAction = "Macro1" Set myCBCtrl = myCB.Controls("test1").Controls.Add(Type:=msoControlButton) myCBCtrl.Caption = "処理2" myCBCtrl.OnAction = "Macro2" Set myCBCtrl = myCB.Controls("test1").Controls.Add(Type:=msoControlButton) myCBCtrl.Caption = "処理3" myCBCtrl.OnAction = "Macro3" Set myCBCtrl = myCB.Controls("test1").Controls.Add(Type:=msoControlButton) myCBCtrl.Caption = "処理4" myCBCtrl.OnAction = "Macro4" myCB.Visible = True End Sub 勿論、それぞれの処理(Macro1等)では、ActiveBook, ActiveSheetを掴んで、作業中にactiveが変更されても、問題ないようにしておいたほうが良いです。 具体的には、 Sub Macro1() TargetFileName = ActiveWorkbook.Name TargetSheetname = ActiveSheet.Name With Workbooks(TargetFileName).Worksheets(TargetSheetname) .Cells(1,1 ).Interior.ColorIndex = 3 .Cells(1, 1).Value = TargetFileName .Cells(2, 1).Value = TargetSheetname End With End Sub このように、With Workbooks(TargetFileName).Worksheets(TargetSheetname) を使えば、裏(アクティブでない)に行っても、きちんと対象のブック、シートに処理を施すことができます。 アクティブでないシート上でのソートも、もちろん可能です。 注意点は、上記で、「.」を忘れると、今、目にあるシートが対象になってしまうことです。 .Cells(2, 1).Value = TargetSheetname ではなく、 Cells(2, 1).Value = TargetSheetname とするとです。 大村あつし氏の「かんたんプログラミング EXCEL VBA」と言う本が、 非常に判りやすく説明がなされています。

  • TTak
  • ベストアンサー率52% (206/389)
回答No.4

マクロのみアドインファイルで保存しておいて、アドイン登録しておけけば、元のブックが軽くなると共に、パソコンの負担も軽いです。動作も多少は速くなるかな。 マクロの呼び出し方は#2で述べられている方法と同じです。 ネットワーク環境なら、サーバにアドインファアイルを保存しておいて一旦、クライアント側でアドイン登録してもらうと、複数のブックで同じマクロを使うこともできます。

bobo12
質問者

お礼

ありがとうございます。 参考にさせていただきます。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.3

マクロを記録したブックを開いておけば、F8キーでマクロ一覧にマクロ名が表示されますので実行可能です。 また個人用マクロブック(PERSONAL.XLS)を以下のフォルダに作成しておくと、エクセル起動時にマクロブックが自動で読み込まれ、マクロが使えるようになります。 \Officeインストールフォルダ\Excel\XLSTART\PERSONAL.XLS ただしマクロの中でオブジェクト(Rangeなど)を曖昧に使っているとエラーとなる場合があります。ですから With ActiveSheet  .Range("A1") = ActiveWorkBook.Sheets("Sheet2").range("B1") End Eith のようにオブジェクトを明記する方がよいと思います。

bobo12
質問者

お礼

ありがとうございます。 参考にさせていただきます。

回答No.2

こんにちは。 Application.Run "ブック名!プロシージャ名" でいけると思います。 ヘルプなどで確認をお願いします。 色々なブックで実行したいなら、個人用マクロブックに保存しても 良いかもしれません。

bobo12
質問者

お礼

ありがとうございます。 参考にさせていただきます。

  • bt65106
  • ベストアンサー率44% (4/9)
回答No.1

マクロをVBEからエクスポートさせて別のブックのVBEからインポートさせてはいかがですか Module実行が制御コードからの実行でしたら上気の方法になりますが、Function として実行する場合やUserFormのClickからの実行でしたらプログラムをそのまま別のブックのVBEには[Copy]&[Paste]で行った方が早いです。

bobo12
質問者

補足

ご回答ありがとうございます。 ただ、マクロを実行させたいファイルは、日々内容が更新されるものなので、マクロだけをひとつのファイルに保存しておき、日々更新されるファイルを選択して、そこにマクロを実行するという方法がいいのではないかと思ったのですが・・・。

関連するQ&A