0

ActiveXオブジェクトの場合など、フォームコントロールのイベントプロシージャを定義する方法はありますか?

現在、ユーザーがActiveXコマンドボタンを追加/削除するGUIがありますが、各ボタンを追加してグローバルコレクションにアイテムを追加しようとすると、エラー91が発生しました。私の最善の推測は、この非常に嫌われている現象のためです。プロジェクトの現在の状態では、イベントプロシージャを定義できる場合は、フォームコントロールボタンの使用に切り替えるのが最善のオプションです。そうでない場合は、ActiveXコントロールオブジェクトを操作した後、何らかの方法でグローバル変数を保存して読み戻す必要があるかもしれません。

4

1 に答える 1

2

ボタンを追加してクリックをキャプチャするだけの場合は、それらに共通のマクロを割り当て、ボタンの名前に基づいて実行するアクションを切り替えることができます (ボタンの作成時に設定しApplication.Caller、.呼び出されたプロシージャ)

Sub AddButtons()

    With ActiveSheet.Buttons.Add(100, 100, 50, 50)
        .Name = "button1"
        .OnAction = "ClickHandler"
    End With
    With ActiveSheet.Buttons.Add(200, 100, 50, 50)
        .Name = "button2"
        .OnAction = "ClickHandler"
    End With


End Sub

Sub ClickHandler()
    Dim bName As String

    bName = Application.Caller
    Select Case bName
        Case "button1": MsgBox "Clicked First button"
        Case "button2": AnotherSub 
    End Select

End Sub
于 2012-05-23T19:01:44.017 に答える