Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何创建ActiveX组合框数组_Excel_Vba - Fatal编程技术网

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

我试图向excel工作表动态添加几个activex组合框,其数量和内容取决于以前设置的其他数据。我想将它们存储到一个数组中,以便以后管理它们的内容(在同一个工作表中,将有其他具有不同用途的组合框)。我运行以下代码:

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