2024年1月6日发(作者:)

(完整版)VBA实战系列(ListView控件)

(完整版)VBA实战系列(ListView控件)

编辑整理:

尊敬的读者朋友们:

这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((完整版)VBA实战系列(ListView控件))的内容能够给您的工作和学习带来便利。同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。

本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快 业绩进步,以下为(完整版)VBA实战系列(ListView控件)的全部内容。

冬雨Q:470-020-8739

(完整版)VBA实战系列(ListView控件)

(完整版)VBA实战系列(ListView控件)

编辑整理:张嬗雒老师

尊敬的读者朋友们:

这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布到文库,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是我们任然希望 (完整版)VBA实战系列(ListView控件) 这篇文档能够给您的工作和学习带来便利。同时我们也真诚的希望收到您的建议和反馈到下面的留言区,这将是我们进步的源泉,前进的动力。

本文可编辑可修改,如果觉得对您有帮助请下载收藏以便随时查阅,最后祝您生活愉快 业绩进步,以下为 〈(完整版)VBA实战系列(ListView控件)〉 这篇文档的全部内容。

冬雨Q:470-020-8739

(完整版)VBA实战系列(ListView控件)

VBA项目实战__ListView控件应用

ListView控件是一款非常优秀的表格控件,被广泛应用于VBA项目.VBA使用者熟练地掌握此控件的用法,不仅能大大地增加自己学习VBA的兴趣,而且对实际工作也有很好的帮助。

一、

Excel基础数据

二、

实现效果

我们要通过VBA控件list view,实现如下图示效果

三、

实现过程

(一)添加listview控件

1.

打开VBE编辑器,新建窗体flist

2.

添加listview控件。在工具箱中选择listview控件放入窗体。

如工具箱中没有该控件,则应查找注册 文件.我们可以按照以下方法进行注册:

1)将文件解压到“C:WINDOWSsystem32”(WindowsXP);

2)单击【开始】|【运行】命令,键入“regsvr32 C:WINDOWSsystem32 "(WindowsXP)”进行注册。

(二)添加代码

冬雨Q:470-020-8739

(完整版)VBA实战系列(ListView控件)

1。添加表头

Private Sub UserForm_Initialize()

Headers。Add , , ”日期", 64, 0

ListView1。 , , ”姓名”, 54, 2

Headers。Add , , "性别", 42, 2

Headers。Add , , "年龄”, 54, 2

, , ”联系方式”, 54, 2

Headers。Add , , "电话", 99, 2

Headers。Add , , "诊断", 54, 2

Headers。Add , , "手术名称”, 86, 2

ListView1。View = lvwReport ’显示格式为报表格式

ListView1。FullRowSelect = True '允许整行选中

nes = True ’显示网格线

’ ListView1。Sorted = True '排序

End Sub

以上代码中 , , ”日期”, 64, 0中的64代表该表头字段的宽度,0代表居左显示方式.

【应用技巧】

在实际应用中,如何确定列宽对初学者来说是一个难点,这里给大家提供一个确定列宽的实用方法。通常ListView控件加载的数据都存放在一张excel工作表中,我们先在工作表中调整好列宽,然后用ListView控件需要加载的excel表格的列宽作为相应ListView控件的列宽即可,求列宽可用以vba代码实现。个人具体做法见如下过程:

Sub 代码生成1__ListView标题头和列宽()

Dim sh As Worksheet, i

Set sh = Sheet1

Debug。Print "Private Sub UserForm_Initialize()”

For i = 1 To sh。Cells(1, )。End(xlToLeft).Column

If i = 1 Then " ListView1。ColumnHeaders。Add , ,"”” & sh。Cells(1, i) & ""”, " & Int((1, i).Width) & ",0”

If i 〉 1 Then Debug。Print ” , ,""” & (1,

i) & ”””, " & Int(sh。Cells(1, i)。Width) & ”,2"

Next i

" ListView1。View = lvwReport" & Chr(10) & " wSelect

= True” & Chr(10) & " nes = True" & Chr(10) & ”End Sub"

' ListView1。 , , "日期”, 64, 0 注释:对齐方式(0:左,1右,2居中),首先必须靠左,这是控件自身特性决定的

End Sub

立即窗口显示debug。print结果,可以复制此代码,是不是简单快捷很多。

冬雨Q:470-020-8739

(完整版)VBA实战系列(ListView控件)

2.加载数据

Sub ListDisp()

Dim cn As Object, rs As Object, sql As String, Itm

Set cn = CreateObject(”tion”) ’连接数据库CreateObject("adodb。connection”)

Set rs = CreateObject(”ADODB。Recordset")

”provider=。4。0;extended properties='excel 8.0;HDR=yes;IMEX=2';data source=" & ThisWorkbook。FullName

sql = ”Select * from [病例数据$A1:Q] "

rs。Open sql, cn, 1, 3

ems。Clear ’清除ListView记录

Do While Not

’数据加载代码开始

Set Itm = ems。Add()

If Not IsNull((”日期”)) Then = (”日期”)

If Not IsNull(rs。Fields("姓名")) Then Itm。SubItems(1) = rs。Fields("姓名")

If Not IsNull(rs。Fields(”性别”)) Then ms(2) = rs。Fields(”性别”)

If Not IsNull(rs。Fields(”年龄”)) Then ms(3) = rs。Fields(”年龄”)

If Not IsNull((”联系方式”)) Then Itm。SubItems(4) = rs。Fields(”联系方式”)

If Not IsNull(rs。Fields("电话")) Then Itm。SubItems(5) = rs。Fields("电话”)

If Not IsNull(rs。Fields("诊断”)) Then Itm。SubItems(6) = rs。Fields("诊断”)

If Not IsNull(rs。Fields("手术名称")) Then Itm。SubItems(7) = (”手术名称”)

If Not IsNull(("病理号”)) Then Itm。SubItems(8) = rs。Fields("病理号”)

If Not IsNull(rs。Fields(”手术时间”)) Then Itm。SubItems(9) = ("手术时间")

If Not IsNull((”病理诊断")) Then Itm。SubItems(10) = rs。Fields(”病理诊断")

If Not IsNull(rs。Fields(”病情摘要”)) Then Itm。SubItems(11) = rs。Fields(” 冬雨Q:470-020-8739

(完整版)VBA实战系列(ListView控件)

病情摘要")

If Not IsNull(("手术情况")) Then Itm。SubItems(12) = ("手术情况")

If Not IsNull(rs。Fields(”备注”)) Then Itm。SubItems(13) = (”备注”)

If Not IsNull((”辅助检查”)) Then ms(14) = rs。Fields("辅助检查")

If Not IsNull(rs。Fields("手术图片")) Then Itm。SubItems(15) = rs。Fields(”手术图片")

If Not IsNull((”随访”)) Then Itm。SubItems(16) = rs。Fields("随访")

’数据加载代码结束

rs。MoveNext

Loop

Set rs = Nothing

cn。Close

End Sub

【应用技巧】:

以上面代码相似,代码中存在大量类似重复的代码.一句句打字无疑影响效率.可以用以下代码生成部分代码:

Sub 代码生成2__Listview_item()

Dim sh As Worksheet, i%, s

Set sh = Sheet1

Debug。Print "Set Itm=ListView1。ListItems。Add()"

For i = 1 To (1, Columns。Count)。End(xlToLeft)。Column

s = Cells(1, i)。Value

If i = 1 Then Debug。Print " if Not IsNull(rs。Fields(”"" & s & ”"")) then

= rs。Fields(””” & s & "””)" '

If i > 1 Then Debug。Print ” if Not IsNull((””” & s & """)) then

ms(" & i - 1 & ") = ("”” & s & """)” ’

Next i

End Sub

Debug立即窗口显示,复

通过以上两段代码,listview控件可以顺利加载并列表显示数据。

冬雨Q:470-020-8739

(完整版)VBA实战系列(ListView控件)

四、知识归纳

以上做法仅限于冬雨开发过程中的一点用法。为方便VBA爱好者学习,将listview控件相关知识归纳如下:

(一)语法

Headers。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。 , , ”姓名", 40, lvwColumnLeft

右对齐: ListView1。ColumnHeaders。Add , , "姓名", 40, lvwColumnRight

中间对齐: ListView1。 , , ”姓名", 40, lvwColumnCenter

这里需特别提醒ListView控件首列只能左对齐,否则代码会出现编译错误。

2、排序属性

ListView控件在初始化之前,可以根据用户需求对指定列进行排序,其代码如下:

= True 'listivew的排序属性为True时, ListView控件将对指定列进行排序,属性为False时ListView控件将不具有排序功能。

y = 0 ' 0为listivew排序的列索引号,0为第1列、1为第2列,以此类推,若此项属性值未设置,ListView控件将默认按首列排序.如果我们想点击

ListView表头排序,可用以下代码实现:

Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib。ColumnHeader)

If — 1 > —1 Then y = ColumnHeader。Index — 1

End Sub

3、显示方式设置

ListView控件除了可以对数据排列格式进行设置外,还可以对数据显示方式进行设置,常见的有日期显示方式、金额显示方式,以单元格F3数据加载给ListView控件第2列为例,其代码如下:

日期显示方式: m1(1) = Format(Cells(3, "F"), ”YYYYY—MM—DD")

金额显示方式: m1(1) = Format(Cells(3, "F"), ”#0。00”)

4、选择ListView控件任意一行,获取行号

I =

冬雨Q:470-020-8739

(完整版)VBA实战系列(ListView控件)

5、获取ListView控件第I行,首列的值

ListView1。ListItems(I).Text

6、获取ListView控件第I行,J列的值

ListView1。ListItems(I)。SubItems(J - 1)

7、删除ListView控件第I行数据

ems。Remove I

8、删除ListView控件所有数据

ListView1。

9、获取ListView控件记录数

ListView1。

冬雨Q:470-020-8739