プロが教えるわが家の防犯対策術!

お世話になります。

OSはWin11 エクセルはoffice365 です。

参照図の①のマクロ名が、
  '000000 住所郵便番号検索簡単お薦め ver1.01 220601.xlsm'!先頭行.先頭行
   が表示されます。
   

いつもは参照図②のようになるのですが今回初めての経験で、
パスを取り参照図の②のようにしたいのです。

どうすればいいかご指導いただけませんか。

「VBA マクロ名のパスをとるには」の質問画像

質問者からの補足コメント

  • ご指導いただきありがとうございます。
    下記の部分が知識不足の小生には理解できず頑張りましたが中々見いだせまん。
    わがままですが再度詳細にご指導いただければ嬉しいです。

    「開いているすべてのブック でも表示させたくない場合は、
    対象をPrivate Subにする事やプロシージャに引数(ダミーで良い)を付加したりすれば出来ると思います。」

    No.1の回答に寄せられた補足コメントです。 補足日時:2022/06/07 16:12

A 回答 (2件)

000000 住所郵便番号検索簡単お薦め ver1.01 220601.xlsm側の


先頭行モジュールにある
先頭行プロシージャの頭にPrivate を加えると
開いているすべてのブック でも表示されなくなると思います
(マクロダイアログから実行できなくなります)
なので220601.xlsm側でもボタンやショートカットキーなど実行トリガーを作る必要があります

マクロダイアログから実行できなくなるのは困る場合は、

他のブックから・・・ver1.01 220601.xlsmのマクロを使用したい場合は
ver1.01 220601.xlsmを開かず、#1にあるように
Sub 先頭行()
Application.Run "000000 住所郵便番号検索簡単お薦め ver1.01 220601.xlsm'!先頭行.先頭行"
End Sub
を作成して呼び出します。(他のブックのマクロをApplication.Runで呼ぶと呼ばれたブックは開きますので実行後閉じるコードを加えた方が良いかも知れません

他に表示しないやり方は、先頭行モジュールの一番上にOption Private Moduleを付けるとモジュールレベルで他のアプリケーションまたはプロジェクトでは使用できなくなります。(判り難くなると思いますので参考程度で)

>プロシージャに引数(ダミーで良い)を付加したりすれば出来ると思います。
この方法は既存のVBAに支障をきたす場合があります
あくまで、参考
Sub test(dummy As Variant)
MsgBox ("テスト")
End Sub
と言うプロシージャがある場合、プロシージャ実行には引数が必要になります
ダイアログに表示されるのは、実行可能なプロシージャなので表示されません
ただし、実行には引数を付加する必要がありますので

Private Sub test1()
Dim dummy As Variant
Call test(dummy)
End Sub

Sub test(dummy As Variant) ’直接実行できません
MsgBox ("テスト")
End Sub

のようにする必要があります。
さらに、Private Sub test1() なので マクロのダイアログには表示されませんのでボタンなどに登録やマクロ実行プロセス内で呼ぶなどの必要があります。
(ボタン登録時はPrivateを外しておき登録後Privateを付加すると簡単かな)


まとめ
ご質問にまっすぐに回答すると
他のブックが開かれている時に 開いているすべてのブック を選択している場合、
他のブックのマクロ表示が加わり表示されます
実行対象にないマクロならば、作業中のブックに変え表示しましょう

開いているすべてのブックを選択しても表示したくない場合は、#1#2の説明にあるように表示されているブック側のマクロを変更する必要があります
表示しないようにする方法はいくつかありますが、ダイアログからの実行が出来なくなるので、使用用途などを考慮して手を加えましょう

長文になりました。説明べたなのでどうでしょうか?なんとなくお判りいただけましたか・・
    • good
    • 0

こんにちは


他のブックが開いている状態でマクロダイアログを開いているすべてのブックを対象に 表示すると実行可能なマクロが表示されます。

開いているすべてのブックを 作業中のブックに変えるとダイアログを表示したブックのみに記載されている実行可能なマクロが表示できます

②のようにする場合は、ダイアログを表示するブックに各プロシージャ名のプロシージャを作成して 
Application.Run  で 他のブックにあるマクロを(実行)呼びます

Sub 先頭行()
Application.Run "000000 住所郵便番号検索簡単お薦め ver1.01 220601.xlsm'!先頭行.先頭行"
End Sub

で実行させることが出来ます。
(実行内容によっては正しく処理できないかもですが)

開いているすべてのブック でも表示させたくない場合は、
対象をPrivate Subにする事やプロシージャに引数(ダミーで良い)を付加したりすれば出来ると思います。
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!