VBA实战系列(ListView控件)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

VBA项目实战__ListView控件应用ListView控件是一款非常优秀的表格控件,被广泛应用于VBA项目。VBA使用者熟练地掌握此控件的用法,不仅能大大地增加自己学习VBA的兴趣,而且对实际工作也有很好的帮助。一、Excel基础数据二、实现效果我们要通过VBA控件listview,实现如下图示效果三、实现过程(一)添加listview控件1.打开VBE编辑器,新建窗体flist2.添加listview控件。在工具箱中选择listview控件放入窗体。如工具箱中没有该控件,则应查找注册MSCOMCTL.OCX文件。我们可以按照以下方法进行注册:1)将文件解压到“C:\WINDOWS\system32”(WindowsXP);2)单击【开始】|【运行】命令,键入“regsvr32C:\WINDOWS\system32\MSCOMCTL.OCX”(WindowsXP)”进行注册。(二)添加代码1.添加表头PrivateSubUserForm_Initialize()ListView1.ColumnHeaders.Add,,日期,64,0ListView1.ColumnHeaders.Add,,姓名,54,2ListView1.ColumnHeaders.Add,,性别,42,2ListView1.ColumnHeaders.Add,,年龄,54,2ListView1.ColumnHeaders.Add,,联系方式,54,2ListView1.ColumnHeaders.Add,,电话,99,2ListView1.ColumnHeaders.Add,,诊断,54,2ListView1.ColumnHeaders.Add,,手术名称,86,2ListView1.View=lvwReport'显示格式为报表格式ListView1.FullRowSelect=True'允许整行选中ListView1.Gridlines=True'显示网格线'ListView1.Sorted=True'排序EndSub以上代码中ListView1.ColumnHeaders.Add,,日期,64,0中的64代表该表头字段的宽度,0代表居左显示方式。【应用技巧】在实际应用中,如何确定列宽对初学者来说是一个难点,这里给大家提供一个确定列宽的实用方法。通常ListView控件加载的数据都存放在一张excel工作表中,我们先在工作表中调整好列宽,然后用ListView控件需要加载的excel表格的列宽作为相应ListView控件的列宽即可,求列宽可用以vba代码实现。个人具体做法见如下过程:Sub代码生成1__ListView标题头和列宽()DimshAsWorksheet,iSetsh=Sheet1Debug.PrintPrivateSubUserForm_Initialize()Fori=1Tosh.Cells(1,Columns.Count).End(xlToLeft).ColumnIfi=1ThenDebug.PrintListView1.ColumnHeaders.Add,,&sh.Cells(1,i)&,&Int(sh.Cells(1,i).Width)&,0Ifi1ThenDebug.PrintListView1.ColumnHeaders.Add,,&sh.Cells(1,i)&,&Int(sh.Cells(1,i).Width)&,2NextiDebug.PrintListView1.View=lvwReport&Chr(10)&ListView1.FullRowSelect=True&Chr(10)&ListView1.Gridlines=True&Chr(10)&EndSub'ListView1.ColumnHeaders.Add,,日期,64,0注释:对齐方式(0:左,1右,2居中),首先必须靠左,这是控件自身特性决定的EndSub立即窗口显示debug.print结果,可以复制此代码,是不是简单快捷很多。2.加载数据SubListDisp()DimcnAsObject,rsAsObject,sqlAsString,ItmSetcn=CreateObject(ADODB.Connection)'连接数据库CreateObject(adodb.connection)Setrs=CreateObject(ADODB.Recordset)cn.Openprovider=microsoft.jet.oledb.4.0;extendedproperties='excel8.0;HDR=yes;IMEX=2';datasource=&ThisWorkbook.FullNamesql=Select*from[病例数据$A1:Q]rs.Opensql,cn,1,3ListView1.ListItems.Clear'清除ListView记录DoWhileNotrs.EOF'数据加载代码开始SetItm=ListView1.ListItems.Add()IfNotIsNull(rs.Fields(日期))ThenItm.Text=rs.Fields(日期)IfNotIsNull(rs.Fields(姓名))ThenItm.SubItems(1)=rs.Fields(姓名)IfNotIsNull(rs.Fields(性别))ThenItm.SubItems(2)=rs.Fields(性别)IfNotIsNull(rs.Fields(年龄))ThenItm.SubItems(3)=rs.Fields(年龄)IfNotIsNull(rs.Fields(联系方式))ThenItm.SubItems(4)=rs.Fields(联系方式)IfNotIsNull(rs.Fields(电话))ThenItm.SubItems(5)=rs.Fields(电话)IfNotIsNull(rs.Fields(诊断))ThenItm.SubItems(6)=rs.Fields(诊断)IfNotIsNull(rs.Fields(手术名称))ThenItm.SubItems(7)=rs.Fields(手术名称)IfNotIsNull(rs.Fields(病理号))ThenItm.SubItems(8)=rs.Fields(病理号)IfNotIsNull(rs.Fields(手术时间))ThenItm.SubItems(9)=rs.Fields(手术时间)IfNotIsNull(rs.Fields(病理诊断))ThenItm.SubItems(10)=rs.Fields(病理诊断)IfNotIsNull(rs.Fields(病情摘要))ThenItm.SubItems(11)=rs.Fields(病情摘要)IfNotIsNull(rs.Fields(手术情况))ThenItm.SubItems(12)=rs.Fields(手术情况)IfNotIsNull(rs.Fields(备注))ThenItm.SubItems(13)=rs.Fields(备注)IfNotIsNull(rs.Fields(辅助检查))ThenItm.SubItems(14)=rs.Fields(辅助检查)IfNotIsNull(rs.Fields(手术图片))ThenItm.SubItems(15)=rs.Fields(手术图片)IfNotIsNull(rs.Fields(随访))ThenItm.SubItems(16)=rs.Fields(随访)'数据加载代码结束rs.MoveNextLooprs.CloseSetrs=Nothingcn.CloseEndSub【应用技巧】:以上面代码相似,代码中存在大量类似重复的代码。一句句打字无疑影响效率。可以用以下代码生成部分代码:Sub代码生成2__Listview_item()DimshAsWorksheet,i%,sSetsh=Sheet1Debug.PrintSetItm=ListView1.ListItems.Add()Fori=1Tosh.Cells(1,Columns.Count).End(xlToLeft).Columns=Cells(1,i).ValueIfi=1ThenDebug.PrintifNotIsNull(rs.Fields(&s&))thenItm.Text=rs.Fields(&s&)'Ifi1ThenDebug.PrintifNotIsNull(rs.Fields(&s&))thenItm.SubItems(&i-1&)=rs.Fields(&s&)'NextiEndSubDebug立即窗口显示,复通过以上两段代码,listview控件可以顺利加载并列表显示数据。四、知识归纳以上做法仅限于冬雨开发过程中的一点用法。为方便VBA爱好者学习,将listview控件相关知识归纳如下:(一)语法ListView1.ColumnHeaders.Add(index,key,text,width,alignment,icon)Add方法的语法包含下面部分:部分描述object必需的。对象表达式,其值是ColumnHeaders集合。index可选的。唯一标识对象集合成员的整数。key可选的。唯一的字符串表达式,可以用来访问集合的成员。text可选的。出现在ColumnHeader对象中的字符串。width可选的。数值表达式,它使用控件容器的度量单位指定对象的宽度。alignment可选的。决定ColumnHeader对象中文本对齐方式的整数。关于设置信息,请参阅“请参阅列表中Alignment属性的信息。icon可选的。Smallicons图象列表中图象的关键字或索引。说明Add方法返回新插入的ColumnHeader对象的引用。使用index参数在ColumnHeaders集合的特定位置插入列标头。当ColumnHeaders集合成员可能动态变更时,应使用Key属性引用它们,因为任何ColumnHeader对象的Index属性都可以改变。(二)属性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表头排序,可用以下代码实现:PrivateSubListView1_ColumnClick(ByValColumnHeaderAsMSComctlLib.ColumnHeader)IfColumnHeader.Index-1-1ThenListView1.SortKey=ColumnHeader.Index-1EndSub3、显示方式设置ListView控件除了可以对数据排列格式进行设置外,还可以对数据显示方式进行设置,常见的有日期显示方式、金额显示方式,以单元格F3数据加载给ListView控件第2列为例,其代码如下:日期显示方式:It

1 / 5
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功