3

OLEObject(ワークシート上のActiveXコントロール)のイベントGotFocusおよびLostFocusを処理するために、ExcelVBAでカスタムクラスを作成しようとしています。

カスタムクラスclsSheetControl

Dim WithEvents objOLEControl as OLEObject

Public Sub Init(oleControl as OLEObject)
    Set objOLEControl = oleControl
End Sub

カスタムクラスを終了する

ワークシートを呼び出す

Public Sub SetControlHandler()
     set clsControl = new ClsSheetControl
     clsControl.Init(Me.OLEObjects("cmdControl1")
End Sub

ワークシートを終了

ドロップダウンでobjOLEControlを選択すると、カスタムクラスモジュールで「GotFocus」と「LostFocus」を作成できますが、

    Set objOLEControl = oleControl

カスタムクラスで検出された場合、エラーが発生します

「459:オブジェクトまたはクラスはこの一連のイベントをサポートしていません」。

答えを検索しようとしましたが、ほとんどの結果はOLEObject内のコントロールオブジェクトへのアクセスを扱っており、ここでやろうとしていることではありません。

編集

これはワークシートでも機能しません

ワークシート

Dim WithEvents objCtrl As OLEObject
Dim WithEvents chkCtrl As MSForms.CheckBox

Private Sub Worksheet_Activate()
     Set chkCtrl = Me.OLEObjects("chkControl").Object
     Set objCtrl = Me.OLEObjects("chkControl")
End Sub

Private Sub chkControl_GotFocus()
    MsgBox ("chkControl has focus")
End Sub

この線

Set objCtrl = Me.OLEObjects("chkControl")

同じエラーが発生します。ただし、GotFocusイベント(chkControl_GotFocusイベント)に直接アクセスすることは問題ありません。

4

1 に答える 1

0

これは私にとってはうまくいきましたが、Textboxコントロールに固有であり、「GotFocus/LostFocus」イベントはありません...

clsSheetControl

Dim WithEvents objOLEControl As MSForms.TextBox

Public Sub Init(oleControl As MSForms.TextBox)
    Set objOLEControl = oleControl
End Sub

Private Sub objOLEControl_Change()
    MsgBox "Changed"
End Sub

Private Sub objOLEControl_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, _
                                  ByVal Shift As Integer)
    MsgBox "Key down: " & KeyCode
End Sub

ワークシート

Dim objControl As clsSheetControl

Public Sub SetControlHandler()
    Set objControl = New clsSheetControl
    objControl.Init Me.OLEObjects("TextBox1").Object
End Sub
于 2012-05-25T23:19:49.533 に答える