一、VBALISTVIEW控件
VBALISTVIEW控件是VBA开发中输出列表样式最方便的窗体,与常规列表不同,它把自己当做表格处理,类似于Excel的表格,可以很方便地添加、删除、修改、查找自己所需的数据。
二、VBALISTVIEW删除源数据嘛
删除VBALISTVIEW控件中的源数据非常简单。根据VBALISTVIEW控件的开发方式,只需要将源数据从数据表中删除,就可以在VBALISTVIEW中也实现删除效果。
Private Sub btnDelete_Click() Dim iRow As Integer iRow = ListView1.ListItems.Item(ListView1.SelectedItem.Index).Index '删除数据 Sheet1.Cells(iRow, 1).EntireRow.Delete '删除项 ListView1.ListItems.Remove ListView1.SelectedItem.Index End Sub
三、VBALISTVIEW修改数据
修改VBALISTVIEW控件中的数据也非常简单。修改数据需要选定某项,然后将该项对应的数据表中的值更新即可。同样的,可以在VBALISTVIEW中实现修改效果。
Private Sub btnEdit_Click() Dim iRow As Integer iRow = ListView1.ListItems.Item(ListView1.SelectedItem.Index).Index '修改值 Sheet1.Cells(iRow, 1) = txtValue.Value '更新项 ListView1.ListItems.Item(ListView1.SelectedItem.Index).SubItems(1) = txtValue.Value End Sub
四、VBALISTVIEW分页查询
VBALISTVIEW控件支持分页功能,可以根据需要自定义每页数据行数。在这里,我们是通过把所有数据分割到不同的框架中,然后根据选择的框架来动态加载不同的数据实现的分页控制。
Private Sub UserForm_Initialize() '设置VBALISTVIEW中的数据源 Set lv = ListView1 '设置VBALISTVIEW中的字段 With lv.ColumnHeaders .Add , "Key", "ID" .Add , "Value", "Value" End With '设置分页 nRecPerPage = 10 nTotalRecords = Sheet1.Range("A2").End(xlDown).Row - 1 nPages = WorksheetFunction.RoundUp(nTotalRecords / nRecPerPage, 0) TotalPages.Caption = nPages For i = 1 To nPages frmPages.AddItem "Page " & i Next i End Sub Private Sub frmPages_Click() '每次点击框架更新VBALISTVIEW中的数据 lv.ListItems.Clear For j = 1 To nRecPerPage If ((frmPages.Value - 1) * nRecPerPage + j) > nTotalRecords Then Exit For Set li = lv.ListItems.Add(, , Sheet1.Cells((frmPages.Value - 1) * nRecPerPage + j + 1, 1)) li.SubItems(1) = Sheet1.Cells((frmPages.Value - 1) * nRecPerPage + j + 1, 2) Next j End Sub
五、VBALISTVIEW查询窗体
VBA中ListView控件还支持查询窗体功能,可以在窗体中输入关键字,然后在VBALISTVIEW中快速检索符合要求的数据项,并且可以根据需要频繁地更改查询条件。
Private Sub btnFilter_Click() Keyword = txtKeyword.Value '检查数据是否为空 If Len(Trim(Keyword)) = 0 Then MsgBox ("Please enter a keyword to search.") Exit Sub End If '清空VBALISTVIEW中的项 lv.ListItems.Clear For i = 2 To Sheet1.Range("A2").End(xlDown).Row If InStr(Sheet1.Cells(i, 2), Keyword) > 0 Then Set li = lv.ListItems.Add(, , Sheet1.Cells(i, 1)) li.SubItems(1) = Sheet1.Cells(i, 2) End If Next i End Sub
六、ListView添加数据
VBALISTVIEW控件支持添加行数据功能。在列表中添加数据是很简单的,直接在数据表的末尾添加一行,在VBALISTVIEW中插入即可。以下示例演示如何手动添加数据到VBALISTVIEW控件中。
Private Sub btnAdd_Click() Dim li As ListItem Set li = lv.ListItems.Add(, , Sheet1.Range("A2").End(xlDown).Row + 1) li.SubItems(1) = txtValue.Value End Sub
七、VBA ListView允许编辑
在VBA中,也可以定义VBALISTVIEW控件,使其支持编辑功能。通过在控件的属性设置中设置编辑为True,可以实现双击列表项进行编辑的效果。
Private Sub lv_ItemClick(ByVal Item As MSComctlLib.ListItem) '双击项进行编辑 If lv.SelectedItem Is Nothing Then Exit Sub lv.SelectedItem.Editable = True End Sub Private Sub lv_Scroll(ByVal ActionX As Long, ByVal ActionY As Long) If lv.SelectedItem Is Nothing Then Exit Sub lv.SelectedItem.Editable = False End Sub
八、ListView显示数据库数据
VBA中ListView控件可以直接显示数据库中的数据。以下示例中演示了如何通过ADO连接到Access数据库,并显示其中一个表格中的数据
'创建连接字符串 Dim connString As String connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\Test.accdb;" '创建连接对象 Dim conn As New ADODB.Connection conn.Open connString '创建Recordset对象 Dim rs As New ADODB.Recordset rs.Open "SELECT * FROM MyTable", conn '将数据绑定到VBALISTVIEW控件上 While Not rs.EOF Set li = lv.ListItems.Add(, , rs.Fields("ID")) li.SubItems(1) = rs.Fields("Value") rs.MoveNext Wend '关闭连接和记录集 rs.Close conn.Close
九、VBA中ListView获取数据
通过VBALISTVIEW控件也能够获取到对应行或列中的数据。在VBALISTVIEW的事件函数中进行操作即可。
Private Sub lv_ItemClick(ByVal Item As MSComctlLib.ListItem) '获取第一列的值 MsgBox "Value in column 1: " & Item.Text '获取第二列的值 MsgBox "Value in column 2: " & Item.ListSubItems(1).Text End Sub以上就是VBA中ListView控件的使用详解。无论是在对表格操作或对数据进行筛选,VBA中ListView控件都为我们提供了很好的解决方案。