アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。

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

使用しているEXCELにバージョンは2003です。
よろしくお願いいたします。

A 回答 (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
といった具合です
    • good
    • 0

リンク先にワークシート上に動的に配置したコントロールの配列の制御方法が回答されています。

予め配置したコントロールなら、ワークシートのActivateイベントなどにクラス生成を記述しても良いと思います。
ご参考まで。
http://okwave.jp/qa4033874.html
    • good
    • 1

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

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