我试图将几个activex组合框动态添加到excel工作表中,其数量和内容取决于先前设置的其他数据。我想将它们存储到数组中以随后管理它们的内容(在同一工作表中,会有其他用途不同的组合框)。我运行以下代码:
Sub run_Combo_Test()
Dim DestinationBookmarkCombo() As Object
Dim i, k As Integer
Dim nCombos, nHeaderLines, nOptions As Integer
nCombos = 5
nOptions = 4
nHeaderLines = 3
ReDim DestinationBookmarkCombo(0 To nCombos - 1) As Object
For i = 0 To nCombos - 1
Set DestinationBookmarkCombo(i) = Worksheets("bula").OLEObjects.Add(ClassType:="Forms.ComboBox.1", _
Link:=False, DisplayAsIcon:=False, Left:=50, Top:=80, Width:=100, _
Height:=15)
With DestinationBookmarkCombo(i)
With .Object
.Left = xlApp.Worksheets("bula").Cells(nHeaderLines + 1 + i, 4).Left
.Top = xlApp.Worksheets("bula").Cells(nHeaderLines + 1 + i, 4).Top
.Placement = 1
For k = 1 To nOptions
.AddItem "Option " + CStr(k)
Next k
.Name = "Combo_" + CStr(i)
'.OnAction = "myCombo_Change"
End With
End With
Next i
End Sub
该代码生成一个空的组合框,并返回“需要对象”错误。我无法跟踪问题出在哪里。有人可以帮忙吗? 预先感谢!
答案 0 :(得分:0)
我认为您只需要在AddItem前面添加“ .Object”即可。调试这种事情很困难,因为VBA不想在动态添加用户界面对象时允许断点或步进。
Option Explicit
Sub run_Combo_Test()
Dim DestinationBookmarkCombo() As Object
Dim i, k As Integer
Dim nCombos, nHeaderLines, nOptions As Integer
nCombos = 3
nOptions = 4
nHeaderLines = 3
ReDim DestinationBookmarkCombo(0 To nCombos - 1)
For i = 0 To nCombos - 1
Set DestinationBookmarkCombo(i) = Worksheets("bula").OLEObjects.Add(ClassType:="Forms.ComboBox.1", _
Link:=False, DisplayAsIcon:=False, Left:=50, Top:=80, Width:=100, _
Height:=15)
DestinationBookmarkCombo(i).Left = Worksheets("bula").Cells(nHeaderLines + 1 + i, 4).Left
DestinationBookmarkCombo(i).Top = Worksheets("bula").Cells(nHeaderLines + 1 + i, 4).Top
DestinationBookmarkCombo(i).Placement = 1
For k = 1 To nOptions
DestinationBookmarkCombo(i).Object.AddItem "Option " & CStr(k)
Next k
DestinationBookmarkCombo(i).Name = "Combo_" + CStr(i)
Next i
End Sub