• ベストアンサー

【ExcelVBA】commandButtonをクラスモジュールで制御するには

お世話になります。 エクセルVBAで、ワークシートに置いたコマンドボタンの制御を、クラスモジュールから 行いたいと考えています。 制御といっているのはボタンの使用可不可、イベントの実行などです。 いろいろ調べてみたのですが、フォームからのイベントをクラスモジュールで行っているのは 見つけたのですが、ワークシート上に直接配置したボタンなどの制御は見つけることが出来ませんでした。 使用しているEXCELにバージョンは2003です。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

出来ますが 必要なプロパティの公開などが結構面倒ですよ # コードの字下げには全角スペースを使用しています ClassモジュールをMyButtonとして作成 Dim WithEvents objBtn as MSForms.CommnadButton Public Event Click() Private Sub Class_Initialize()   ' クラスモジュールとシート上のコマンドボタンをつなぐ   Set objBtn = ActiveSheet.Shapes("CommandButton1").DrawingObject.Object End Sub Private Sub objBtn_Click()   ' ボタンが押されたときに呼び出されるプロシージャ RaiseEvent Click   ' Clickイベントを呼び出してユーザーのBtn_Clickなどを呼び出す End Sub   ' Enabledプロパティの公開 Public Property Let Enabled(bValue As Boolean)   ' 左辺の場合   objBtn.Enabled = bValue End Property Public Property Get Enabled() As Boolean   ' 右辺の場合   Enabled = objBtn.Enabled End Property といった具合にします シートモジュールなどで Dim WithEvents MyBtn as myButton Sub Init()   Set MyBtn = New myButton   myBtn.Enabled = True End Sub Sub MyBtn_Click()   MsgBox "Classモジュールからの呼び出し " & myBtn.Enabled   myBtn.Enabled = False End Sub といった具合です

その他の回答 (1)

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

リンク先にワークシート上に動的に配置したコントロールの配列の制御方法が回答されています。予め配置したコントロールなら、ワークシートのActivateイベントなどにクラス生成を記述しても良いと思います。 ご参考まで。 http://okwave.jp/qa4033874.html