- 締切済み
他ブックを実行するマクロ
あるexcelファイル(ブック名「自動操作.xlsm」)からべつのexcelファイル(ブック名「a.xlsm」)というファイルを実行するマクロを組んでいます。 Application.Runを用いて「自動操作.xlsm」のコードを以下のように記述しました。 ※「\」は半角の円マークだと考えてくれればいいです。ここで半角の円マークをかいても\と表示されます。また、自動操作とaは同じディレクトリにあります。 Sub Test1() Application.Run "'C:Users\ディレクトリ名\a.xlsm'!test" End Sub また、「a.xlsm」は以下のように記述しました。 Sub test() Dim i As Integer For i = 1 To 5 '移動元ファイルパスの設定 Cells(i, 1) = i Next End Sub ただ1~5行にその行数を記入するマクロです。 a.xlsmを開いた状態でこれを実行すると、「アプリケーション定義またはオブジェクト定義のエラーです」とでます。 a.xlsmを閉じた状態で実行すると、「このブックでマクロが使用できないか、またはすべてのマクロが無効になっている可能性があります」とでます。 いったいなにを間違えているのでしょうか。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- kkkkkm
- ベストアンサー率66% (1719/2589)
No2の補足です。 閉じている場合は以下のようにしてください。ファイルは自動で開きます。 > また、自動操作とaは同じディレクトリにあります。 上記の前提でしたら(Module1に記載されている場合) Application.Run "'" & ThisWorkbook.Path & "a.xlsm'!Module1.test" なお、a.xlsmのシートにデータを入力したい場合 a.xlsmのsub testの最初に ThisWorkbook.Activate Sheets("sheet1").Activate(入力したシート名) を入れておかないと自動操作.xlsmのアクティブなシートに入力されてしまいます。
- kkkkkm
- ベストアンサー率66% (1719/2589)
a.xlsmの標準モジュール(例えばModule1)にコードが記載されているのでしたら Application.Run "'a.xlsm'!test" もしくは(プロシージャ名を他の標準モジュールで利用するかもしれない可能性を考えると) Application.Run "'a.xlsm'!Module1.test" Sheet1にコードが記載されているなら Application.Run "'a.xlsm'!Sheet1.test" に変更してみてください。
- dogs_cats
- ベストアンサー率38% (278/717)
VBAを記載しているファイルがオープンされていないからエラーを表示しているだけで、ファイルをオープンするコードを記載すれば良いだけです。 testのコードもa.xlsmのシートに数値を記載するコードなのでファイルを開いている事が必須のコードですよね。 指定マクロ有効ファイルがオープンしていない場合にはファイルをオープンする後にマクロを実行するコードの一例です。 Sub test2() Dim flag As Boolean Dim wb As Workbook Dim MyFile As String MyFile = "C:Users\ディレクトリ名\a.xlsm" flag = False For Each wb In Workbooks If wb.FullName = MyFile Then flag = True Exit For End If Next '指定ファイルがオープンしていない場合はファイルオープン If flag = False Then Workbooks.Open MyFile End If Application.Run "a!Test" End Sub