これ何て呼びますか

作業環境:Win10 Pro、EXCEL2016VBAを使用しています。
質問事項:ワークシートのダブルクリックイベントで実行する処理を記述済です。
同ワークシート上の例えばA1からA9を範囲指定するSubモジュールからダブルクリックして連続処理をしたいのですが、
モジュールからPrivate subモジュールに記載の処理を呼び出す方法を教えてください。
よろしくお願いします。

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

  • つらい・・・

    質問が不透明ですみません。補足させていただきます。
    ワークシートのイベントでは、ダブルクリック時
    Private Sub Worksheet_BeforeDoubleClick(ByVal target As Range, Cancel As Boolean)
    のように変数targetが引数として使用されます。ダブルクリックをトリガーとして記述した処理の実行となりますが、マウスクリックした特定のセルを対象としての処理を期待します。
    質問は、同じシート上のA1~A9のセルを連続してダブルクリックイベントの処理を実行したいとき他のモジュールから
    Private Sub Worksheet_BeforeDoubleClick()を使う方法を教えて頂くことを期待しています。
    よろしく願いします。

    No.1の回答に寄せられた補足コメントです。 補足日時:2020/07/03 17:42

A 回答 (2件)

こんにちは、


勘違いかも知れませんが、ワークシートのダブルクリックイベントを呼ぶ事を
考えているのでしょうか?
であれば、適切な処理とは思えません。

イベントを呼ばずとも処理したいコードを別プロシージャに書けばよいかと思います。
むしろ、こちらをメインにしてダブルクリックイベントからもこのプロシージャを呼び出せばよいと思います。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
Dim dummy As Variant
Call Module2.Sample(dummy) 'Targetを使用するなら引数に食われることも可能です。
End Sub

Private Sub Test()
Dim dummy As Variant
Call Module2.Sample(dummy)
End Sub

Module2に記載
Public Sub Sample(dummy As Variant) ’ダミー引数があるのでユーザーに表示されない。
MsgBox ("OK") 'メイン処理
End Sub

複数のモジュール間でプロシージャを実行する事はよくあると思います。
Publicはオブジェクト名を明示する事で呼び出せても
Privateは同じモジュール内でなければ呼べないかと、、
しかしPublic sub をユーザー(リボンなどから)から実行できないようにする場合
引数を付ければリボンなどには表示されなくなります。引数は、ダミーで良いので簡単です。
    • good
    • 1
この回答へのお礼

ありがとう

せっかく作ったイベント処理を活用しよとムキになってました。だいぶ頭が固くなって回転、機転が利かなくなた、、、。
「イベントを呼ばずとも処理したいコードを別プロシージャに書けばよい」の一言に「我にかえりました。」ありがとうございます。
パンチのきいた一言に感謝します。時間節約になりました。
ありがとうございました。

お礼日時:2020/07/03 18:20

Private SubとPublic Subの違いは有効範囲の違い


https://e-vba.com/sub/
この回答への補足あり
    • good
    • 1
この回答へのお礼

ありがとう

有用な情報をいただきましてありがとうございました。参考にさせていただきます。
ありがとうございました。

お礼日時:2020/07/05 09:01

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

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A