一、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控件都為我們提供了很好的解決方案。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/154135.html