从Workseet自动填充Combox1和ListBox1

时间:2018-02-18 22:20:23

标签: vba excel-vba combobox listboxitem excel

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

填充了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位于工作表(DropDownMenus)列(" A2:A")中,ListBox1也位于工作表(DropDownMenus)上,但从列开始(" C3:C")。 -D,E,F G等后的每一列对应下一个NIGOCombobox项目
因此,A2 =(" C3:C"),B2 =(" D3:D),C2 =(" E3:D")等等。当新项目输入NIGOCombobox时,它会自动附加到下一个Listbox行。 希望这是有道理的!谢谢

1 个答案:

答案 0 :(得分:0)

不确定你的目标。以下代码将在NIGOcombobox中加载B列,然后在Worksheets("DropDownMenus")的第一行中搜索所选值。因此,如果将列B转换为Worksheets("DropDownMenus")的第一行(从C1开始),该行的行为将类似于"标题",这可能有效。 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的值:您可以直接扫描标题。这样数据结构会更清晰(我认为)。

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