分享

ListView控件入门

 L罗乐 2017-07-06

 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


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多