ここで見つけたすべてのアドバイスに従って、コンボボックスの「変更」機能を自動的に変更しました。Excelシートのコンボボックスの値を変更するまで、コードはエラーを生成しません。マクロは起動されません。
私のコードは次のとおりです。
クラスファイル (class : COptions)
Option Explicit
Public WithEvents lOptions As MSForms.ComboBox
Private Sub lOptions_Change()
MsgBox "hello "
End Sub
モジュールファイル内
Sub macrotest()
Dim j As String
Dim tObject
Set tObject = Sheets("test").OLEObjects.Add(ClassType:="Forms.ComboBox.1", _
Link:=False, _
DisplayAsIcon:=False, _
Left:=50, Top:=80, _
Width:=100, _
Height:=15)
tObject.Name = "Combobox32"
tObject.Object.Font.Size = 8
tObject.Object.BackColor = vbWhite
tObject.Object.AddItem "blub1"
tObject.Object.AddItem "blub2"
'MsgBox "tObject " & tObject.Name
Dim Obj As OLEObject
Dim Cl As COptions
Set Cl = Nothing
Set Collect = New Collection '(previously declared as global variable)
For Each Obj In Sheets("test").OLEObjects
If TypeOf Obj.Object Is MSForms.ComboBox Then
MsgBox Obj.Name 'check if we enter in the loop : always successfull
Set Cl = New COptions
Set Cl.lOptions = Obj.Object
Collect.Add Cl
End If
Next Obj
MsgBox "Collect " & Collect.Count ' which result is 1
End Sub
したがって、すべて正常に動作しますが、Excel ワークシートに戻ると、コンボボックスの値を変更しても何も起こりません。
ところで、このコードの仕組みがよくわかりません。
定義されたクラス (ここでは Cl) の新しいオブジェクトが作成され、変更されます。しかし、変更の対象であるコンボボックスは、どこが変更されているのでしょうか? なぜ新しいオブジェクト Cl を変更することによって、それが変更されるはずのターゲット オブジェクト ComboBox なのですか?
Web 上でこのエラーを見つけられなかったので、何が起こっているのかわかりません。
この問題を解決するにはどうすればよいですか?