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イベント)に直接アクセスすることは問題ありません。