| 
    
     |  | ▼VBA初心者 さん: おはようございます。
 
 
 >通常、コマンドボタンからマクロを起動する場合、
 >
 >> Private Sub CommandButton1_Click()
 >>
 >> End Sub
 >
 >というような記述をするかと思います。
 >
 >コマンドボタンが複数あり、類似した処理を実行したいと考えているのですが、コマンドボタンの数だけ上記のような記述をしないといけないのでしょうか?
 >
 >「OLEObjects」をうまく使えれば・・・と考えているのですが、なかなかうまくいきません。どなたかお知恵をお貸し頂けませんか?
 
 これは、コマンドバー「コントロールツールボックス」のコマンドボタンですね?
 
 結論から言えば、この手の処理はコマンドバー「フォーム」のボタンを使う方が
 よいという事なのですが・・・。
 
 コマンドバー「コントロールツールボックス」のコマンドボタンでも動作としての
 実現は可能です。
 
 
 新規ブックのシートSheet1に「コントロールツールボックス」のコマンドボタンを
 3個配置してください。(Commandbutton1〜Commandbutton3)
 
 VBEにてクラスモジュールを挿入してください。
 (「挿入」----「クラスモジュール」)
 クラス名は規定値のClass1
 このクラスモジュールに
 
 '================================================================
 Public id As Long
 Public WithEvents cmd As CommandButton
 
 Private Sub cmd_Click()
 MsgBox "コマンドボタン" & id & "が押された"
 'ここにクリック時のコードを記述idにより、コードの分岐も可能。
 End Sub
 
 
 更にSheet1のモジュールに
 '=======================================
 Private cls_btn(1 To 3) As Class1
 '==============================================================
 Sub settei()
 For idx = 1 To 3
 Set cls_btn(idx) = New Class1
 With cls_btn(idx)
 .id = idx
 Set .cmd = OLEObjects("commandbutton" & idx).Object
 End With
 Next idx
 End Sub
 
 
 一度、setteiを実行後、各ボタンをクリックして見てください。
 
 とすれば可能ですが、
 何かの拍子にcls_btn()が初期化されてしまうと
 イベントが発生しなくなってしまいます。
 これがちょっと心配の種・・・。
 
 
 これをフォーム」のボタンを使うと
 
 
 標準モジュールに
 
 '=======================================================
 Sub btn_push()
 Dim shpnm As String
 shpnm = Application.Caller
 MsgBox shpnm & "が押された"
 ' shpnmによって処理を分岐できる
 End Sub
 
 
 として、作成した「フォーム」のボタンに上記のマクロを登録して試してください
 
 
 私も本来は新しい概念が好きなのですが、
 「フォーム」のボタンのほうが安全性は高そうですよ!!
 
 |  |