質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

2回答

2073閲覧

VBA で別のファイルのマクロを非アクティブ状態で実行したい

saito5

総合スコア14

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2021/11/22 02:56

編集2021/11/22 07:24

VBA で別のファイルのマクロを非アクティブ状態で実行したいです。

呼び出される別ファイルのマクロは、自分がアクティブだったらエラー終了してしまいます。
VBA で非アクティブ状態のまま別ファイルのマクロを実行する方法はありますか?


呼び出すマクロ

VBA

1 2Public Const ToolPath As String = "C:\Users\XXXXXX\Box\フォルダ" 3Public Const ToolFile As String = "コード付与ツール.xlsm" 4Public Const MacroName1 As String = "コード付与" 5 6sub 更新マクロ() 7 8' 付与ツールファイルを開く 9 Workbooks.Open (ToolPath & "\" & ToolFile, ReadOnly) 10 DoEvents 11 12' 開いたら最小化する 13 ActiveWindow.WindowState = xlMinimized 14 15' 対象シートをアクティブにする 16 ThisWorkbook.Worksheets("予算1").Activate 17 18' 付与ツールファイルのマクロを実行する。 19 Application.Run "'" & ToolPath & "\" & ToolFile & "'!" & MacroName1 20 21end sub 22

別ファイルのマクロ

VBA

1Sub コード付与 2 3' 前略 4 5 ' 実行時アクティブなシートがこのファイルであった場合のエラー処理 6 Dim i As Integer 7 For i = 1 To ThisWorkbook.Sheets.Count 8 If ws.Name = ActiveWorkbook.Sheets(i).Name Then 9 MsgBox "正しいワークブックで実行されませんでした。" & vbCrLf _ 10 & "対象データのワークブックを最前面にして、マクロを再実行してください。", vbCritical 11 End 12 End If 13 Next i 14 15' 後略 16 17end sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

メソッドを呼び出すマクロを実行すると、ブックはアクティブ化されません。
https://docs.microsoft.com/ja-jp/office/troubleshoot/excel/workbook-not-activated

上記の情報を逆手にとって、Application.Run 直前に、
Application.ScreenUpdating = False
を突っ込んでみたら、非アクティブ状態で実行ができました!

Excelファイルオープン>マクロ実行>上書き保存のマクロを動かすマクロがはかどりそうです。
PowerAutomate も検討したのですが、今回はVBAでOKでした!

正解コード

呼び出すマクロ

VBA

1 2' 略 3' ツールファイルを開く 4 Workbooks.Open ToolPath & "\" & ToolFile 5 doevents 6 7' このファイルの対象シートをアクティブにする 8 ThisWorkbook.Worksheets("予算1").Activate 9 10' スクリーン更新不可 11 Application.ScreenUpdating = False 12 13' マクロを実行 14 Application.Run "'" ToolPath & "\" & ToolFile & "'!" & MacroName1 15 DoEvents 16 17 18' 略

投稿2021/11/22 07:27

編集2021/11/22 07:42
saito5

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

提示のコードは省略されすぎていて、実行できません。

それ以前にワークシートの名前では、別ブックなら同じ名前になることもあるので、自身がアクティブかどうかの判定には使えません。

自身がアクティブかどうかの判定なら、ブック名で判定すればいいのでは。

vba

1' 実行時アクティブなブックがこのファイルであった場合のエラー処理 2 If ThisWorkbook.Name = ActiveWorkbook.Name Then 3 MsgBox "正しいワークブックで実行されませんでした。" & vbCrLf _ 4 & "対象データのワークブックを最前面にして、マクロを再実行してください。", vbCritical 5 Exit Sub 6 End If

投稿2021/11/22 03:57

hatena19

総合スコア33715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

saito5

2021/11/22 06:09

実行できないからわからない、なら、仕方ないですね
hatena19

2021/11/22 06:19

実行できない質問のコードは無視して、 判定できるコードは回答しています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問