Excel VBAで、非アクティブブックのマクロを実行させようとするとエラーが発生します。
一般化してしまっていますが以下がコードです。
この中で
ThisWorkbook.Activate
をなくすと正常に動作します。
何かわかる方がいましたらアドバイスいただけると幸いです。
'fileURL 開きたいブックのURL 'fileName 開いたブックの名前 'macro1 開いたブックのマクロ名 Workbooks.Open fileURL 'fileURLは開きたいブックのURLです。 ThisWorkbook.Activate '開いたファイルを非アクティブにする。 Application.Run fileName & "!" & macro1 '開いた別ブックのマクロを実行
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答2件
0
ベストアンサー
呼び出している処理側の問題のようなので、参考としてActive依存をチェックする方法を載せておきます。
グローバルなRangeプロパティへの参照を機械的に検知するアイディア - Qiita
imihito_Sandbox/DisableExcelGlobal.bas at master · imihito/imihito_Sandbox
今回の場合であれば以下のようにすればチェックできるでしょう
Application.Run
で呼び出しているブックに標準モジュールを追加-
- で追加した標準モジュールに以下のコードを貼り付ける
- メニューバー「デバッグ」の中の「~のコンパイル」を実行(シュートカットキー Alt→D→L)
- Activeに依存した処理の箇所でコンパイルエラーが発生するため、適切に修正
- 3.、4.をエラーが無くなるまで繰り返す
- 1.で追加した標準モジュールを削除
vba
1'Excelのグローバルなメンバーを無効化するモジュール 2'https://qiita.com/nukie_53/items/4e9226ac8f747e772afd 3'https://github.com/imihito/imihito_Sandbox/blob/master/Excel/DisableExcelGlobal.bas 4 5'https://teratail.com/questions/257856 6 7Option Private Module 8 9'親を明示しないと危ないもの、使用頻度が低そうなメンバー(主観)の定義を上書きし無効化する。 10'上位階層のプロパティや関数的なメソッドのみが残る。 11 12'Method override 13Public Sub Calculate(a): End Sub 14Public Sub DDEExecute(): End Sub 15Public Sub DDEInitiate(): End Sub 16Public Sub DDEPoke(): End Sub 17Public Sub DDERequest(): End Sub 18Public Sub DDETerminate(): End Sub 19 20'Property override 21Public Sub ActiveCell(): End Sub 22Public Sub ActiveChart(): End Sub 23Public Sub ActivePrinter(): End Sub 24Public Sub ActiveSheet(): End Sub 25Public Sub ActiveWindow(): End Sub 26Public Sub ActiveWorkbook(): End Sub 27Public Sub AddIns(): End Sub 28Public Sub Cells(): End Sub 29Public Sub Charts(): End Sub 30Public Sub Columns(): End Sub 31Public Sub CommandBars(): End Sub 32Public Sub Creator(): End Sub 33Public Sub DDEAppReturnCode(): End Sub 34Public Sub Excel4IntlMacroSheets(): End Sub 35Public Sub Excel4MacroSheets(): End Sub 36Public Sub Names(): End Sub 37Public Sub Parent(): End Sub 38Public Sub Range(): End Sub 39Public Sub Rows(): End Sub 40Public Sub Selection(): End Sub 41Public Sub Sheets(): End Sub 42Public Sub Worksheets(): End Sub 43 44'Hidden Property 45Public Sub ActiveDialog(): End Sub 46Public Sub ActiveMenuBar(): End Sub 47Public Sub Assistant(): End Sub 48Public Sub DialogSheets(): End Sub 49Public Sub MenuBars(): End Sub 50Public Sub Modules(): End Sub 51Public Sub ShortcutMenus(): End Sub 52Public Sub Toolbars(): End Sub
ymakoto さんの回答と近い話ですが、fileName
の中身がおかしいのではないでしょうか?
また、開いたブックから名前を取得できるためfileName
自体不要でしょう。
以下参考コードです。
fileURL
となっていたことから、適当なOneDrive上のファイルのURLで試してみましたが問題無く動作しました。
vba
1Public Sub teratail257856() 2 3 Dim fileURL As String 4 fileURL = "https://example.com/Sample.xlsm" 5 6 Dim macro1 As String 7 macro1 = "Macro1" 8 9 Dim macroBook As Workbook 10 Set macroBook = Workbooks.Open(fileURL) 11 12 ThisWorkbook.Activate 13 14 Dim appXl As Application 15 Set appXl = macroBook.Application 16 17 'macro1 が Sub プロシージャなら不要。 18 Dim resultOfMacro1 As Variant 19 20 '以下のどちらでも動作する。 21 'ブックの名前などは「'」で囲った方がベター。 22 'ブック名のみ指定。 23 resultOfMacro1 = appXl.Run("'" & macroBook.Name & "'!" & macro1) 24 'フルパスで指定。 25 resultOfMacro1 = appXl.Run("'" & macroBook.FullName & "'!" & macro1) 26 27 macroBook.Saved = True 28 macroBook.Close 29 30End Sub
投稿2020/05/01 10:01
編集2020/05/02 03:31総合スコア2166
0
勘違いでしたら申し訳ありません。VBAの提示が一部ですので何とも言えませんが
通常ですとFilepathをつけて開かれると思います。
サンプルではfileNameのみでfileURLと紐づいていないような気がします。
Thisworkbook.activeを入れることによってOPENしたExcelのファイル名はわかるものの
pathが見つけられなるのでエラーになるのではないでしょうか。
違っていたらすみません(無視してください)。。。
VBA
1Sub OpenWorkbookTest() 2 Dim Filepath 3 Filepath = "C:¥temp¥test1.xlsx"'■通常はこのように記述する 4 5 Dim targetWorkbook As Workbook 6 Set targetWorkbook = Workbooks.Open(Filepath) 7 8End Sub
投稿2020/05/01 02:08

退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/05/01 10:04
2020/05/01 13:51
2020/05/01 13:55
2020/05/01 15:07
2020/05/02 03:15
2020/05/02 12:56