|
▼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
として、作成した「フォーム」のボタンに上記のマクロを登録して試してください
私も本来は新しい概念が好きなのですが、
「フォーム」のボタンのほうが安全性は高そうですよ!!
|
|