从工作表自动填充组合 1 和列表框

Auto Populate Combox1 and ListBox1 from Workseet

我正在尝试将我的 NIGOcomboBox 列表与我工作中的 ListBox1 列表连接起来sheet (DropDownMenus)。目前我有 NIGOcomboBox 从

填充
 Private Sub UserForm_Initialize()
 Dim cell As Range

'Populate NIGO dropdown menu from "DropDownMenus worksheet.
 For Each cell In .Range("B2:B" & .Cells(Rows.Count, 2).End(xlUp).Row)
 If Not IsEmpty(cell) Then NIGOcombobox.AddItem cell.Value
 Next cell
 End With

然后我有一个 ListBox,其填充如下:

 Private Sub NIGOcombobox_Change()

 With Worksheets("DropDownMenus")
 .Activate
 Select Case NIGOcombobox
 'Populate NIGO Reason list by dropdown menu selection.
 Case "AMRF"
  For Each cell In .Range("C3:C" & .Cells(Rows.Count, 3).End(xlUp).Row)
  If Not IsEmpty(cell) Then ListBox1.AddItem cell.Value
 Next cell

 Case "OATS"
  For Each cell In .Range("D3:C" & .Cells(Rows.Count, 3).End(xlUp).Row)
  If Not IsEmpty(cell) Then ListBox1.AddItem cell.Value
 Next cell

 Case Else
  MsgBox "Please select a NIGO Reason"

 End Select
 End With
 End Sub

它没有完全按计划工作。我需要这样做,这样当下一个人过来向 NIGOcombox 添加新项目时,它会自动选择下一行,这样他们就不必调整代码。

例子
NIGOCombobox 在 sheet (DropDownMenus) 列 ("A2:A") 中,ListBox1 也在 sheet (DropDownMenus) 中,但从列 ("C3:C") 开始。 - D、E、F G 等之后的每一列对应于下一个 NIGOCombobox 项目。

因此,A2 =("C3:C")、B2 =("D3:D), C2 = ("E3:D") 等等。比起在 NIGOCombobox 中输入新项目时,它会自动附加到下一个列表框行。 希望这是有道理的!谢谢

不确定你的目标。以下代码将加载 NIGOcombobox 中的 B 列,然后在 Worksheets("DropDownMenus") 的第一行中搜索选定的值。因此,如果您将 B 列转置到 Worksheets("DropDownMenus") 的第一行(从 C1 开始),该行的行为将类似于 "header",这可能会起作用。 PS:如果要添加到以前选择的项目,请删除行 ListBox1.Clear

Private Sub UserForm_Initialize()
Dim cell As Range

    'Populate NIGO dropdown menu from "DropDownMenus worksheet.
    For Each cell In Worksheets("DropDownMenus").Range("B2:B" & Worksheets("DropDownMenus").Cells(Rows.Count, 2).End(xlUp).Row)
        If Not IsEmpty(cell) Then NIGOcombobox.AddItem cell.Value
    Next cell

End Sub

Private Sub NIGOcombobox_Change()
    Dim TheValueInCombobox As String
    Dim TheHeader As Range
    Dim TheHeaderColumn As Long
    Dim LastRow As Long

    ListBox1.Clear
    TheValueInCombobox = NIGOcombobox.Value
    Set TheHeader = Worksheets("DropDownMenus").Range("A1:Z1").Find(TheValueInCombobox) 'You might want to expand the range
    TheHeaderColumn = TheHeader.Column
    LastRow = Worksheets("DropDownMenus").Cells(Rows.Count, TheHeaderColumn).End(xlUp).Row

    For Each cell In Worksheets("DropDownMenus").Range(Cells(3, TheHeaderColumn), Cells(LastRow, TheHeaderColumn))
        If Not IsEmpty(cell) Then ListBox1.AddItem cell.Value
    Next cell

End Sub

编辑:

不需要在专用列中填充 NIGOcombobox 的值:您可以直接扫描 headers。这样数据结构会更清晰(我觉得)

Private Sub UserForm_Initialize()
Dim cell As Range
Dim lColumn As Long

    'Populate NIGO dropdown menu from "DropDownMenus worksheet.
    lColumn = Worksheets("DropDownMenus").Cells(1, Columns.Count).End(xlToLeft).Column
    For Each cell In Worksheets("DropDownMenus").Range(Cells(1, 3), Cells(1, lColumn))
        If Not IsEmpty(cell) Then NIGOcombobox.AddItem cell.Value
    Next cell

End Sub

Private Sub NIGOcombobox_Change()
    Dim TheValueInCombobox As String
    Dim TheHeader As Range
    Dim TheHeaderColumn As Long
    Dim LastRow As Long
    Dim lColumn As Long

    ListBox1.Clear
    TheValueInCombobox = NIGOcombobox.Value
    lColumn = Worksheets("DropDownMenus").Cells(1, Columns.Count).End(xlToLeft).Column
    Set TheHeader = Worksheets("DropDownMenus").Range(Cells(1, 3), Cells(1, lColumn)).Find(TheValueInCombobox)
    TheHeaderColumn = TheHeader.Column
    LastRow = Worksheets("DropDownMenus").Cells(Rows.Count, TheHeaderColumn).End(xlUp).Row

    For Each cell In Worksheets("DropDownMenus").Range(Cells(3, TheHeaderColumn), Cells(LastRow, TheHeaderColumn))
        If Not IsEmpty(cell) Then ListBox1.AddItem cell.Value
    Next cell

End Sub