ListView控件入门 ListView控件是一款非常优秀的表格控件,对vba初学者来说,熟练地掌握此控件的用法,不仅能大大地增加自己学习vba的兴趣,而且对实际工作也有很好的帮助,本文将对ListView控件的各种用法作详细介绍,由于水平有限,若有不当之处,欢迎批评指正。 一、 添加表头 ListView控件添加表头,一般在窗体的初始化事件中完成,假如给一ListView1控件添加姓名、性别、文化、住址、身份证可用以下代码实现: Private Sub UserForm_Initialize() ListView1.ColumnHeaders.Add , , '姓名', 40 ListView1.ColumnHeaders.Add , , '性别', 40 ListView1.ColumnHeaders.Add , , '文化', 40 ListView1.ColumnHeaders.Add , , '住址', 120 ListView1.ColumnHeaders.Add , , '身份证', 80 ListView1.View = lvwReport ListView1.FullRowSelect = True ListView1.Gridlines = True End Sub 在以上代码中40、40、40、120、80代表该字段所在的列宽,在实际应用中,如何确定列宽对初学者来说是一个难点,这里给大家提供一个确定列宽的实用方法,通常ListView控件加载的数据都存放在一张excel工作表中,我们先在工作表中调整好列宽,然后用ListView控件需要加载的excel表格的列宽作为相应ListView控件的列宽即可,求列宽可用以vba代码实现(如求excel表格D列的列宽) Sub wdt() MsgBox Cells(1, 'd').Width End Sub 其他属性介绍 ListView1.View = lvwReport,显示格式为报表格式 ListView1.FullRowSelect = True, 允许整行选中 ListView1.Gridlines = True, 显示网格线 在1楼的章节中,我们对ListView控件加载表头作了较为详尽的介绍,在实际应用中,由于加载的对象都事先存储在excel表格中,我们在加载表头时还可以对代码进行优化,通过循环的方式,减少代码的编写量,比如有一张excel表格,首行为标题行,共有10个字段,加载该表头时可用以下代码简单实现: Private Sub UserForm_Initialize() For J = 1 To 10 ListView1.ColumnHeaders.Add , , Cells(1, J), Cells(1, J).Width Next ListView1.View = lvwReport ListView1.FullRowSelect = True ListView1.Gridlines = True End Sub 清除表头可用以下代码实现: ListView1.ColumnHeaders.Clear,请大家记住该代码,在后面深入介绍中会应用到此语句。 二、ListView加载数据 在第一章中,我们学习了如何给ListView控件加载表头,在本章中我们将学习如何给ListView控件加载数据,假如ListView控件的表头为姓名、性别、文化、住址、身份证,张三的个人信息如下: 男、大学、南京市白下区、320123196610162018,将张三的个人信息加载给ListView控件代码如下: Set Itm = ListView1.ListItems.Add() Itm.Text = '张三' Itm.SubItems(1) = '男' Itm.subitems(2) = '大学' Itm.subitems(3) = '南京市白下区' Itm.subitems(4) = '320123196610162018' 以上是加载1个人的信息,若现在有一张excel表格,其表名为《员工信息表》,该表首行为姓名、性别、文化、住址、身份证标题, 从第2行到100行是99个人的个人信息,现在要将这99个人的个人信息加载到ListView控件中,可用循环方法实行,代码如下: For i = 2 To 100 Set Itm = ListView1.ListItems.Add() Itm.Text = Cells(i, 1) Itm.subitems(1) = Cells(i, 2) Itm.subitems(2) = Cells(i, 3) Itm.subitems(3) = Cells(i, 4) Itm.subitems(4) = Cells(i, 5) NextNext ListView控件加载数据除上述加载方法之外,还有一种重要的数据加载方法即加载SQL查询记录集,以上述《员工信息表》为例,其查询、加载数据代码如下: Dim cn As Object, rs As Object Set cn = CreateObject('ADODB.Connection') '连接数据库 Set rs = CreateObject('ADODB.Recordset') cn.Open 'dsn=excel files;dbq=' & ThisWorkbook.FullName Sql = 'Select * from [员工信息表$] ' rs.Open Sql, cn, 1, 3 ListView1.ListItems.Clear '清除ListView记录 Do While Not rs.EOF Set Itm=ListView1.ListItems.Add() '添加记录 Itm.Text = rs.Fields('姓名') '添加第一列内容 Itm.SubItems(1) = rs.Fields('性别') '添加第二列内容 Itm.SubItems(2) = rs.Fields('文化') '添加第三列内容 Itm.SubItems(3) = rs.Fields('住址') '添加第四列内容 Itm.SubItems(4) = rs.Fields('身份证') '添加第五列内容 rs.MoveNext Loop rs.Close: Set rs = Nothing: cn.Close 以上代码中牵涉到SQL查询相关知识点,对SQL查询不熟悉的朋友,可在网上查阅相关知识进行学习,这样才能更好地理解上述代码,更加方便日后的实际应用。 三、ListView控件的重要属性和方法 在本章中我们将介绍ListView控件的一些重要属性和方法,望大家能牢记这些属性和方法。 1、对齐属性 ListView控件在初始化之前,为美观之需要,我们可以对每列数据排列格式进行设置,每列数据可或左对齐、或右对齐、或中间对齐,该项工作和加载表头同步进行,下面以加载“ 姓名”表头为例,其代码如下: 左对齐: ListView1.ColumnHeaders.Add , , '姓名', 40, lvwColumnLeft 右对齐: ListView1.ColumnHeaders.Add , , '姓名', 40, lvwColumnRight 中间对齐: ListView1.ColumnHeaders.Add , , '姓名', 40, lvwColumnCenter 这里需特别提醒ListView控件首列只能左对齐,否则代码会出现编译错误。 2、排序属性 ListView控件在初始化之前,可以根据用户需求对指定列进行排序,其代码如下: ListView1.Sorted = True 'listivew的排序属性为True时, ListView控件将对指定列进行排序,属性为False时ListView控件将不具有排序功能。 ListView1.SortKey = 0 ' 0为listivew排序的列索引号,0为第1列、1为第2列,以此类推,若此项属性值未设置,ListView控件将默认按首列排序。如果我们想点击ListView表头排序,可用以下代码实现: Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader) If ColumnHeader.Index - 1 > -1 Then ListView1.SortKey = ColumnHeader.Index - 1 End Sub 3、显示方式设置 ListView控件除了可以对数据排列格式进行设置外,还可以对数据显示方式进行设置,常见的有日期显示方式、金额显示方式,以单元格F3数据加载给ListView控件第2列为例,其代码如下: 日期显示方式: Itm.subitem1(1) = Format(Cells(3, 'F'), 'YYYYY-MM-DD') 金额显示方式: Itm.subitem1(1) = Format(Cells(3, 'F'), '#0.00') 4、选择ListView控件任意一行,获取行号 I = ListView1.SelectedItem.Index 5、获取ListView控件第I行,首列的值 ListView1.ListItems(I).Text 6、获取ListView控件第I行,J列的值 ListView1.ListItems(I).SubItems(J - 1) 7、删除ListView控件第I行数据 ListView1.ListItems.Remove I 8、删除ListView控件所有数据 ListView1.ListItems.Clear 9、获取ListView控件记录数 ListView1.ListItems.Count |
|