VBA实战系列(ListView控件)

  • 格式:docx
  • 大小:105.74 KB
  • 文档页数:6

下载文档原格式

  / 6
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ListView1.FullRowSelect = True '允许整行选中
ListView1.Gridlines = True '显示网格线
' ListView1.Sorted = True '排序
End Sub
以上代码中ListView1.ColumnHeaders.Add , , "日期", 64, 0中的64代表该表头字段的宽度,0代表居左显示方式。
【应用技巧】
在实际应用中,如何确定列宽对初学者来说是一个难点,这里给大家提供一个确定列宽的实用方法。通常ListView控件加载的数据都存放在一张excel工作表中,我们先在工作表中调整好列宽,然后用ListView控件需要加载的excel表格的列宽作为相应ListView控件的列宽即可,求列宽可用以vba代码实现。个人具体做法见如下过程:
ListView1.ColumnHeaders.Add , , "姓名", 54, 2
ListView1.ColumnHeaders.Add , , "性别", 42, 2
ListView1.ColumnHeaders.Add , , "年龄", 54, 2
ListView1.ColumnHeaders.Add , , "联系方式", 54, 2
sql = "Select * from [病例数据$A1:Q] "
rs.Open sql, cn, 1, 3
ListView1.ListItems.Clear '清除ListView记录
Do While Not rs.EOF
'数据加载代码开始
Set Itm = ListView1.ListItems.Add()
三、实现过程
(一)添加listview控件
1.打开VBE编辑器,新建窗体flist
2.添加listview控件。在工具箱中选择listview控件放入窗体。
如工具箱中没有该控件,则应查找注册MSCOMCTL.OCX文件。我们可以按照以下方法进行注册:
1)将文件解压到“C:\WINDOWS\system32”(WindowsXP);
Set sh = Sheet1
Debug.Print "Set Itm=ListView1.ListItems.Add()"
For i = 1 To sh.Cells(1, Columns.Count).End(xlToLeft).Column
s = Cells(1, i).Value
If i = 1 Then Debug.Print " if Not IsNull(rs.Fields(""" & s & """)) then Itm.Text = rs.Fields(""" & s & """)" '
If Not IsNull(rs.Fields("手术图片")) Then Itm.SubItems(15) = rs.Fields("手术图片")
If Not IsNull(rs.Fields("随访")) Then Itm.SubItems(16) = rs.Fields("随访")
'数据加载代码结束
Next i
Debug.Print " ListView1.View = lvwReport" & Chr(10) & " ListView1.FullRowSelect = True" & Chr(10) & " ListView1.Gridlines = True" & Chr(10) & "End Sub"
ListView1.ColumnHeaders.Add , , "电话", 99, 2
ListView1.ColumnHeaders.Add , , "诊断", 54, 2
ListView1.ColumnHeaders.Add , , "手术名称", 86, 2
ListView1.View = lvwReport '显示格式为报表格式
当ColumnHeaders集合成员可能动态变更时,应使用Key属性引用它们,因为任何ColumnHeader对象的Index属性都可以改变。
(二)属性
1、对齐属性
ListView控件在初始化之前,为美观之需要,我们可以对每列数据排列格式进行设置,每列数据可或左对齐、或右对齐、或中间对齐,该项工作和加载表头同步进行,下面以加载“姓名”表头为例,其代码如下:
If Not IsNull(rs.Fields("日期")) Then Itm.Text = rs.Fields("日期")
If Not IsNull(rs.Fields("姓名")) Then Itm.SubItems(1) = rs.Fields("姓名")
If Not IsNull(rs.Fields("性别")) Then Itm.SubItems(2) = rs.Fields("性别")
通过以上两段代码,listview控件可以顺利加载并列表显示数据。
四、知识归纳
以上做法仅限于冬雨开发过程中的一点用法。为方便VBA爱好者学习,将listview控件相关知识归纳如下:
(一)语法
ListView1.ColumnHeaders.Add(index, key, text, width, alignment, icon)
VBA项目实战__ListView控件应用
ListView控件是一款非常优秀的表格控件,被广泛应用于VBA项目。VBA使用者熟练地掌握此控件的用法,不仅能大大地增加自己学习VBA的兴趣,而且对实际工作也有很好的帮助。
一、Excel基础数据
二、实现效果
我们要通过VBA控件list view,实现如下图示效果
If Not IsNull(rs.Fields("手术时间")) Then Itm.SubItems(9) = rs.Fields("手术时间")
If Not IsNull(rs.Fields("病理诊断")) Then Itm.SubItems(10) = rs.Fields("病理诊断")
If Not IsNull(rs.Fields("病情摘要")) Then Itm.SubItems(11) = rs.Fields("病情摘要")
Set cn = CreateObject("ADODB.Connection") '连接数据库CreateObject("adodb.connection")
Set rs = CreateObject("ADODB.Recordset")
cn.Open "provider=microsoft.jet.oledb.4.0;extended properties='excel 8.0;HDR=yes;IMEX=2';data source=" & ThisWorkbook.FullName
If Not IsNull(rs.Fields("手术情况")) Then Itm.SubItems(12) = rs.Fields("手术情况")
If Not IsNull(rs.Fields("备注")) Then Itm.SubItems(13) = rwenku.baidu.com.Fields("备注")
If Not IsNull(rs.Fields("辅助检查")) Then Itm.SubItems(14) = rs.Fields("辅助检查")
' ListView1.ColumnHeaders.Add , , "日期", 64, 0注释:对齐方式(0:左,1右,2居中),首先必须靠左,这是控件自身特性决定的
End Sub
立即窗口显示debug.print结果,可以复制此代码,是不是简单快捷很多。
2.加载数据
Sub ListDisp()
Dim cn As Object, rs As Object, sql As String, Itm
Add方法的语法包含下面部分:
部分描述
object必需的。对象表达式,其值是ColumnHeaders集合。
index可选的。唯一标识对象集合成员的整数。
key可选的。唯一的字符串表达式,可以用来访问集合的成员。
text可选的。出现在ColumnHeader对象中的字符串。
width可选的。数值表达式,它使用控件容器的度量单位指定对象的宽度。
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
cn.Close
End Sub
【应用技巧】:
以上面代码相似,代码中存在大量类似重复的代码。一句句打字无疑影响效率。可以用以下代码生成部分代码:
Sub代码生成2__Listview_item()
Dim sh As Worksheet, i%, s
If Not IsNull(rs.Fields("年龄")) Then Itm.SubItems(3) = rs.Fields("年龄")
If Not IsNull(rs.Fields("联系方式")) Then Itm.SubItems(4) = rs.Fields("联系方式")
If Not IsNull(rs.Fields("电话")) Then Itm.SubItems(5) = rs.Fields("电话")
alignment可选的。决定ColumnHeader对象中文本对齐方式的整数。关于设置信息,请参阅“请参阅列表中Alignment属性的信息。
icon可选的。Smallicons图象列表中图象的关键字或索引。
说明Add方法返回新插入的ColumnHeader对象的引用。
使用index参数在ColumnHeaders集合的特定位置插入列标头。
If i > 1 Then Debug.Print " if Not IsNull(rs.Fields(""" & s & """)) then Itm.SubItems(" & i - 1 & ") = rs.Fields(""" & s & """)" '
Next i
End Sub
Debug立即窗口显示,复
If i = 1 Then Debug.Print " ListView1.ColumnHeaders.Add , ,""" & sh.Cells(1, i) & """, " & Int(sh.Cells(1, i).Width) & ",0"
If i > 1 Then Debug.Print " ListView1.ColumnHeaders.Add , ,""" & sh.Cells(1, i) & """, " & Int(sh.Cells(1, i).Width) & ",2"
左对齐: ListView1.ColumnHeaders.Add , , "姓名", 40, lvwColumnLeft
右对齐: ListView1.ColumnHeaders.Add , , "姓名", 40, lvwColumnRight
中间对齐: ListView1.ColumnHeaders.Add , , "姓名", 40, lvwColumnCenter
2)单击【开始】|【运行】命令,键入“regsvr32 C:\WINDOWS\system32 \MSCOMCTL.OCX”(WindowsXP)”进行注册。
(二)添加代码
1.添加表头
Private Sub UserForm_Initialize()
ListView1.ColumnHeaders.Add , , "日期", 64, 0
Sub代码生成1__ListView标题头和列宽()
Dim sh As Worksheet, i
Set sh = Sheet1
Debug.Print "Private Sub UserForm_Initialize()"
For i = 1 To sh.Cells(1, Columns.Count).End(xlToLeft).Column
If Not IsNull(rs.Fields("诊断")) Then Itm.SubItems(6) = rs.Fields("诊断")
If Not IsNull(rs.Fields("手术名称")) Then Itm.SubItems(7) = rs.Fields("手术名称")
If Not IsNull(rs.Fields("病理号")) Then Itm.SubItems(8) = rs.Fields("病理号")