ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 80562|回复: 92

[分享] ListView控件入门

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2012-10-20 11:09 | 显示全部楼层 |阅读模式
本帖最后由 xbl7966 于 2012-10-31 11:16 编辑

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, 显示网格线
待续---------------------------------

评分

6

查看全部评分

TA的精华主题

TA的得分主题

发表于 2012-10-29 22:08 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
没了?希望这个专题能够继续

TA的精华主题

TA的得分主题

发表于 2012-10-29 22:38 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-11-6 17:49 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-11-6 23:55 | 显示全部楼层
本帖最后由 xbl7966 于 2012-12-13 12:26 编辑

   
接1楼
   在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
待续-------------------------------------

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2012-11-7 09:19 | 显示全部楼层
本帖最后由 hzruziniu 于 2012-11-7 09:28 编辑
xbl7966 发表于 2012-11-6 23:55
在1楼的篇章中,我们对ListView控件加载表头作了较为详尽的介绍,在实际应用中,由于加载的对象都事先存 ...


谢谢楼主详细而精彩的讲解,但你的门还只开了一半,只跨进了一只脚,还有一只脚尚在门外呢?期待楼主继续把门彻底打开,然后走进屋内,打开所有房间的门,看清和了解房间内的一切。我们期待着。

TA的精华主题

TA的得分主题

发表于 2012-11-7 15:20 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-11-8 12:13 | 显示全部楼层
本帖最后由 xbl7966 于 2012-11-8 18:34 编辑

接5楼
   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
待续-------------------------------------
   
   

评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2012-11-8 14:38 | 显示全部楼层
不错,楼主现在可否讲一下,点击字段排序的功能和隔行不同颜色。请继续。

TA的精华主题

TA的得分主题

发表于 2012-11-8 16:19 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
非常好的教程,学习中。

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-24 16:43 , Processed in 0.044840 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表