ここから本文です

[VBA]マクロが2回実行されてしまいます。以下の「test2」を実行すると、イミディエ...

アバター

ID非公開さん

2019/6/1811:07:27

[VBA]マクロが2回実行されてしまいます。以下の「test2」を実行すると、イミディエイトウインドウには「OK」が2回出てきます。
これは一体どういうメカニズム?

なんでしょうか。

<Book1.xlsm>
Sub test2()
Application.Run "PERSONAL.xlsb!test(False)"
End Sub

<PERSONAL.xlsb>
Sub test(abc As Boolean)
Debug.Print "OK"
End Sub

閲覧数:
51
回答数:
2

違反報告

ベストアンサーに選ばれた回答

tri********さん

2019/6/1814:25:53

Runメソッドは
オブジェクト.Run プロシージャ名,引数1,引数2,...

なので正しい記述は

Application.Run "PERSONAL.xlsb!test", False

になります。これなら1回しか実行されないはずです。

なぜ2回繰り返されるのかはよくわかりません。バグのような気もします。
その間違った記述だとプロシージャの戻り値としてはエラーが返されます。

<PERSONAL.xlsb>側を
Function test(abc As Boolean) As Boolean
Debug.Print "OK"
test = True
End Function

に変えて次のようにすると違いがわかります。

<Book1.xlsm>

'//OKを2回とエラーを表示
Sub test2()
Dim rc As Variant
rc = Application.Run("PERSONAL.xlsb!test(False)")
Debug.Print rc
End Sub

'//OK1回とTrue を表示
Sub test3()
Dim rc As Variant
rc = Application.Run("PERSONAL.xlsb!test", False)
Debug.Print rc
End Sub

アバター

質問した人からのコメント

2019/6/18 14:38:02

記述方法だったのですね。
助かりました。

ベストアンサー以外の回答

1〜1件/1件中

プロフィール画像

カテゴリマスター

taihenda****さん

2019/6/1814:28:37

よくわからないが、どうも仕様みたいですね。()付きで渡すとなるようです。

<Book1.xlsm>
Sub test2()
Application.Run "PERSONAL.xlsb!test", False
End Sub

<PERSONAL.xlsb>
Sub test(abc As Boolean)
Debug.Print "OK"
MsgBox abc
End Sub

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる