Excel 如何创建ActiveX组合框数组
我试图向excel工作表动态添加几个activex组合框,其数量和内容取决于以前设置的其他数据。我想将它们存储到一个数组中,以便以后管理它们的内容(在同一个工作表中,将有其他具有不同用途的组合框)。我运行以下代码:Excel 如何创建ActiveX组合框数组,excel,vba,Excel,Vba,我试图向excel工作表动态添加几个activex组合框,其数量和内容取决于以前设置的其他数据。我想将它们存储到一个数组中,以便以后管理它们的内容(在同一个工作表中,将有其他具有不同用途的组合框)。我运行以下代码: Sub run_Combo_Test() Dim DestinationBookmarkCombo() As Object Dim i, k As Integer Dim nCombos, nHeaderLines, nOptions As Integer
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
该代码生成一个空组合框,并返回一个“需要对象”错误。我无法追踪问题所在。有人能帮忙吗?
提前谢谢 我想您只需要在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
我想您只需要在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