如何填充组合框

cke*_*ann 5 excel vba combobox

我对VBA很陌生,而且我一直在努力填充组合框.我正在尝试使用电子表格中第一列的内容填充组合框,以便我可以根据组合框选择删除关联的数据行.

在提出这个问题时,我已经在这里和其他地方查看了几个问题,但我没有发现任何有用的东西.

以下是我尝试过的代码.我有点失落,因为我一直试图拼凑其他问题的不同答案,以使这个工作,但无济于事.我希望组合框填充第1列的值,但它仍然是空白的.

尝试#1这涉及创建动态范围:

=OFFSET(PC_DataSheet!$A$2,0,0, COUNTA(PC_DataSheet!$A$1:$A$65536)-1,1)
Run Code Online (Sandbox Code Playgroud)
Private Sub UserForm1_Initialize()

    Dim rngPCNumber As Range
    Dim ws As Worksheet

    Set ws = Worksheets("Sheet1")

    For Each rngPCNumber In ws.Range("PCNumber")
        Me.PC_ListComboBox.AddItem rngPCNumber.Value
    Next rngPCNumber

End Sub
Run Code Online (Sandbox Code Playgroud)

尝试#2

Private Sub UserForm1_Initialize()

    Dim arr() As Variant

    arr = Worksheets("Sheet1").Range("C2:" & lrow).Value
    PC_ListComboBox.List = arr

End Sub
Run Code Online (Sandbox Code Playgroud)

尝试#3

Private Sub UserForm1_Initialize()

    Dim vArr As Variant
    Dim i As Integer

    vArr = Sheet1.Range("A:1").Value

    With PC_ListComboBox.Clear
         For i = LBound(vArr) To UBound(vArr)
            .AddItem vArr(i)
         Next i
    End With

End Sub
Run Code Online (Sandbox Code Playgroud)

任何有关这方面的帮助将非常感谢!


编辑:我已经尝试将Gary的学生建议的代码插入我的UserForm_Initialize()Sub,但是当我尝试打开userform时,我收到以下错误消息:

运行时错误'9':下标超出范围

当我单击debug时,它会突出显示以下代码:

'Opens PC UserForm when pressed.
Private Sub AddPCButton_Click()

    UserForm.Show 'This line is the line highlighted by the debugger.

End Sub
Run Code Online (Sandbox Code Playgroud)

我不知道是什么导致这个...当我使用建议的代码时,我收到一条错误消息,但是当我删除代码时,userform功能完美无瑕.这里是Private Sub UserForm_Initialize(),包含和不包含建议的代码.

'Clears and Initializes the form when first loaded.
Private Sub UserForm_Initialize()

    'Empties combo boxes.
    PC_OSTypeComboBox = ""
    PC_HDTypeComboBox = ""

    'Populates combo boxes.
    With PC_OSTypeComboBox
        .Clear
        .AddItem "Windows 8"
        .AddItem "Windows 7"
        .AddItem "Windows Vista"
        .AddItem "Windows XP"
        .AddItem "Windows 2000"
        .AddItem "Windows 98"
        .AddItem "Windows NT"
        .AddItem "Windows 95"
    End With
    With PC_HDTypeComboBox
        .Clear
        .AddItem "SATA"
        .AddItem "IDE"
        .AddItem "SCSI"
    End With

End Sub
Run Code Online (Sandbox Code Playgroud)

这包括建议的代码:

'Clears and Initializes the form when first loaded.
Private Sub UserForm_Initialize()

    Dim N As Long, i As Long
    With Sheets("Sheet1")
        N = .Cells(Rows.Count, 1).End(xlUp).Row
    End With

    With PC_NumberComboBox
        .Clear
        For i = 1 To N
            .AddItem Sheets("Sheet1").Cells(i, 1).Value
        Next i
    End With

    'Empties combo boxes.
    PC_OSTypeComboBox = ""
    PC_HDTypeComboBox = ""

    'Populates combo boxes.
    With PC_OSTypeComboBox
        .Clear
        .AddItem "Windows 8"
        .AddItem "Windows 7"
        .AddItem "Windows Vista"
        .AddItem "Windows XP"
        .AddItem "Windows 2000"
        .AddItem "Windows 98"
        .AddItem "Windows NT"
        .AddItem "Windows 95"
    End With
    With PC_HDTypeComboBox
        .Clear
        .AddItem "SATA"
        .AddItem "IDE"
        .AddItem "SCSI"
    End With

End Sub
Run Code Online (Sandbox Code Playgroud)

Gar*_*ent 5

这是一个创建和填充Forms样式组合框的超级简单示例:

Sub FormsStyleComboBox()
    ActiveSheet.DropDowns.Add(411, 14.25, 124.5, 188.25).Select
    N = Cells(Rows.Count, "A").End(xlUp).Row
    strng = Range("A1:A" & N).Address
    Selection.ListFillRange = strng
End Sub
Run Code Online (Sandbox Code Playgroud)

例如:

在此输入图像描述

编辑#1

我创建了一个名为Demo的UserForm,其中包含一个名为MyBox的组合框

在此输入图像描述

标准模块中我放了:

Sub DisplayIt()
    Demo.Show
End Sub
Run Code Online (Sandbox Code Playgroud)

并在UserForm代码区域中:

Private Sub UserForm_Initialize()
    Dim N As Long, i As Long
    With Sheets("Sheet1")
        N = .Cells(Rows.Count, 1).End(xlUp).Row
    End With

    With MyBox
        .Clear
        For i = 1 To N
            .AddItem Sheets("Sheet1").Cells(i, 1).Value
        Next i
    End With
End Sub
Run Code Online (Sandbox Code Playgroud)

运行DisplayIt()会产生:

在此输入图像描述

这是基于本教程