单独的列表框项目为每个循环做一个

Seperate listbox items to do a for each loop

我在分离列表框项目时遇到问题,因此我可以 运行 循环处理它们。我知道这台 atm 取走所有物品并试图 运行 通过,但我不知道如何将它们分开。 代码如下:

Dim SelectedItems As String
Dim LastRow As Long

LastRow = ActiveSheet.Range("F1").SpecialCells(xlCellTypeLastCell).Row

For i = 0 To ListBox2.ListCount - 1
If ListBox2.Selected(i) = True Then
SelectedItems = SelectedItems & ListBox2.List(i) & vbNewLine
End If
Next i

If SelectedItems = "" Then
MsgBox "Please select minimum one country"
Else

For Each SelectedItems In ListBox2

    For i = 11 To LastRow

    If Range("F" & i).Value = SelectedItems Then
    Rows(i).EntireRow.Hidden = True
    Else: Rows(i).EntireRow.Hidden = False
    End If

    Next i
Next SelectedItems

有人可以帮忙吗?

Dim SelectedItems As String, LastRow As Long
Dim selItem As Variant, selItems As Variant

LastRow = ActiveSheet.Range("F1").SpecialCells(xlCellTypeLastCell).Row

For i = 0 To ListBox2.ListCount - 1
    If ListBox2.Selected(i) = True Then
        SelectedItems = SelectedItems & ListBox2.List(i) & vbNewLine
    End If
Next i

Stop
If SelectedItems = "" Then
    MsgBox "Please select minimum one country"
Else
    SelectedItems = left(SelectedItems, Len(SelectedItems) - 1)
    selItems = Split(SelectedItems, vbNewLine)
    For Each selItem In selItems
        For i = LastRow To 11 Step -1
            If CStr(Range("F" & i).value) = CStr(selItem) Then
                Stop
                Rows(i).EntireRow.Hidden = True
                'Else: Rows(i).EntireRow.Hidden = False
            End If
        Next i
    Next
End If

您的代码无法在不将其拆分为元素的情况下从字符串中识别每个选定的项目。 编辑:在测试中转换代码。我将向您解释(在评论中)如何检查。

注意:我只是想让你的代码可以工作。否则,您可以直接进行过滤,使用 Excel AutoFilter(当然在 VBA 中)...

所以这只是一个小例子,说明我将如何处理这个问题,避免多重循环:


示例数据:


用户表单示例:


用户表单示例代码:

Option Explicit

Private Sub CommandButton1_Click()

Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary")
Dim x As Long, lr As Long
Dim rng As Range

'Check if anything has been selected at all
If Me.ListBox1.ListIndex = 0 Then Exit Sub

'Capture selected items in your ListBox
For x = 0 To Me.ListBox1.ListCount - 1
    If Me.ListBox1.Selected(x) Then
        dict(ListBox1.List(x)) = 1
    End If
Next x

'Filter the range accordingly
With Sheet1
    lr = .Cells(.Rows.Count, 1).End(xlUp).Row
    Set rng = .Range("A1:A" & lr)
    rng.AutoFilter 1, Array(dict.keys), xlFilterValues
End With

End Sub

Private Sub UserForm_Initialize()

Dim lr As Long

'Populate your ListBox
With Sheet1
    lr = .Cells(.Rows.Count, 1).End(xlUp).Row
    Me.ListBox1.RowSource = .Range("A2:A" & lr).Address
End With

End Sub

示例结果: