Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


45463 / 76732 ←次へ | 前へ→

【36262】Re:複数のコマンドボタンの処理
発言  ichinose  - 06/3/27(月) 10:42 -

引用なし
パスワード
   ▼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


として、作成した「フォーム」のボタンに上記のマクロを登録して試してください


私も本来は新しい概念が好きなのですが、
「フォーム」のボタンのほうが安全性は高そうですよ!!
6 hits

【36261】複数のコマンドボタンの処理 VBA初心者 06/3/27(月) 10:10 質問
【36262】Re:複数のコマンドボタンの処理 ichinose 06/3/27(月) 10:42 発言

45463 / 76732 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free