ワークシート上にドロップダウンメニューが10個あり、それぞれがGotFocus()
イベントに対応する必要があります。excel vbaを使用して複数のオブジェクトにイベントを割り当てる方法は?
私は、次のコードを書かれているが、私は、実行時エラー(459)を取得 - clsPDRinput
と呼ばれるクラスで
私は、次のしている「のイベントがあれば、オブジェクトまたはクラスのセットをサポートしていない」:
私はDim tbCollection As Collection
Public Sub InitializePDRInput()
Dim myObj As OLEObject
Dim obj As clsPDRInput
Set tbCollection = New Collection
For Each myObj In Worksheets("1. PDR Documentation").OLEObjects
If TypeName(myObj.Object) = "ComboBox" Then
Set obj = New clsPDRInput
Set obj.myInput = myObj <-- **THIS LINE THROWS ERROR**
tbCollection.Add obj
End If
Next myObj
Set obj = Nothing
End Sub
:私は、エラーを生成している次のコードを実行しています
Public WithEvents inputObj As OLEObject
Public Property Set myInput(obj As OLEObject)
Set inputObj = obj
End Property
Public Sub tbPDRInput_GotFocus()
//Do some stuff...
End Sub
このエラーの原因は不明です。私は持っていましたが、OLEObject
はあまりに一般的であり、すべてOLEObject
がGotFocus()
イベントをサポートしているわけではないので、コードがエラーメッセージを出すのはなぜですか?
OLEObject
をMSForms.ComboBox
に置き換えようとしましたが、問題は解決しません。
任意のアイデア - 私はより多くの調査とここにあるんでした私は問題だと思うものに更新...
- 今2時間ググと空白...
EDITを出ています私の言う限り、問題は何か。
- あなたは(
...inputObj as OLEObject
のように)OLEObject
として変数を宣言する場合は、が露出イベントだけがGotFocus()
とLostFocus()
です。 - あなたは(
...inputObj as MSForms.ComboBox
のように)MSForms.ComboBox
として変数を宣言する場合は、様々なイベントが露出されている(例えばChange()
、Click()
、DblClick()
)が、イベントGotFocus()
とLostFocus()
が
ポイントを露出させないされています1と2は、Excelのオブジェクトモデルと一致しています。その結果、ComboBox
を私のクラスに割り当てようとすると、ComboBox
はGotFocus()
とLostFocus
のイベントをサポートしないため、エラーが発生します(元の投稿を参照)。
今、パズルのためです。コンボボックスを(Control ToolBox
を使用して)ワークシートに追加し、そのコンボボックスをダブルクリックしてコードを取得すると、GotFocus()
とLostFocus()
などのすべてのイベントが公開されます。
'For each myObj' ...'次のinputObj'は一貫性がなく、コンパイルされません。これは実際のコードですか? –
また、 'Dim tbCollection As Collection'はクラスにありますが、' Sub InitializePDRInput'に 'tbCollection'を使用しています。これはモジュール内にあると思います。何が起きてる? –
@ Jean-Francois Corbett - あなたの最初の点では、これはコードのバージョンを削減しています。あなたが指摘している「For each ...」問題はちょうどタイプミスです(私は投稿を編集します)。ポイント2については、再び、typo - 'Dim tbCollection ... 'がモジュール内にあります –