首页 > 解决方案 > VBA Excel - 通过 ListView 控件循环

问题描述

我有 4 个列表视图UserFormListView是否可以按照下面的代码检查哪个是活动的/选择的?

Private Sub CommandButton8_Click()
    For i = 1 To 4
        If me."ListView" & i) is selected Then
            MsgBox me("ListView" & i ).Name
        End If
    Next i
End Sub

它不适用于ListView.SelectedItem. 我真的不明白为什么?即使ListView未选中,也MsgBox弹出第一ListView项为SelectedItem.

For i = 1 To 4
    If Me("ListView" & i).SelectedItem > 0 Then
        MsgBox "listview" & i & " selected item is " & Me("ListView" & i).SelectedItem
    End If
Next i

标签: excelvbalistview

解决方案


首先,当数据加载到列表视图控件上时,会自动选择第一项。因此,为避免这种情况发生,请在添加数据后将第一项的 Selected 属性设置为 False。例如...

Me.ListView1.ListItems(1).Selected = False

或者

Me.Controls("ListView" & i).ListItems(1).Selected = False

然后可以使用下面的代码循环遍历每一个listview控件,然后for each one循环遍历每一项来检查选择了哪一个...

Private Sub CommandButton1_Click()
    
    Dim i As Long
    For i = 1 To 4
        
        Dim lv As ListView
        Set lv = Me.Controls("ListView" & i)
        
        With lv
            Dim j As Long
            For j = 1 To .ListItems.Count
                If .ListItems(j).Selected Then
                    MsgBox lv.Name & " - " & .ListItems(j).Text
                    Exit Sub 'optional
                End If
            Next j
        End With
        
    Next i
    
End Sub

如果您可以选择多个项目,并且想要显示每个项目的名称,请Exit Sub从代码中删除。


推荐阅读