VBA学习(61):Excel VBA 数据分析展示/ListView控件

365软件下载 📅 2025-09-19 19:39:16 👤 admin 👁️ 9753 👑 657
VBA学习(61):Excel VBA 数据分析展示/ListView控件

前面我们分享了使用TreeView控件来输入科目的方法,(Excel VBA 选择输入/TreeView控件、补充:Excel VBA 选择输入/TreeView控件/在工作表中如何顺利使用TreeView控件?),今天,我们分享VBA另一个非常重要的控件,那就是ListView,用来分析和展示数据:

首先说明一下,我们准备做一个“科目汇总表",但今天由于时间与篇幅的关系,我们只做了一点点,只是搭了一个框架,科目汇总还没有做,展示的是明细数据,请不要感到奇怪。

那么,今天的主题应该叫“ListView展示明细账数据"。下面我们来分析一下过程。

第一步,先在明细账中插入一个命令按钮,Name改为CmdSum,Caption改为“科目汇总表",代码后面再加。

第二步,进入VBA代码编辑器,插入用户窗体,改名为Usf_Sum

第三步,在用户窗体上添加“标签”并改名,调整大小

第四步,在用户窗体上添加“ListView"控件,并改名,调整大小

第五步,双击用户窗体,在右上事件窗口,选择“Initialize“,

输入代码:

Private Sub UserForm_Initialize()

Dim arrSum(), arrDetail(), TbTitle()

Dim iCol As Integer

Dim iRow As Integer

Dim DicAccount

Dim LvItem As ListItem

On Error Resume Next

iCol = Sheets("明细账").UsedRange.Columns.count

iRow = Sheets("明细账").UsedRange.Rows.count

arrDetail = Sheets("明细账").Range(Cells(2, 1), Cells(iRow, iCol)).Value

TbTitle = Sheets("明细账").Range(Cells(1, 1), Cells(1, iCol)).Value

With Me.LvDetail

.View = lvwReport 'listview控件的显示外观

.Gridlines = True '是否有表格线,True有表格线

'.Sorted = True '是否排序

'.CheckBoxes = True '是否显示勾选框

.LabelEdit = lvwManual

.FullRowSelect = True '是否整行选跳

.ForeColor = vbBlue '字体颜色

'添加表头

For i = 1 To UBound(TbTitle, 2)

If TbTitle(1, i) <> "" Then

If i = 1 Then

.ColumnHeaders.Add , , TbTitle(1, i), 80

Else

.ColumnHeaders.Add , , TbTitle(1, i), 80 ', lvwColumnCenter

End If

End If

Next

'添加数据

For i = 1 To iRow - 1

If arrDetail(i, 1) <> "" Then

Set LvItem = Me.LvDetail.ListItems.Add

LvItem.Text = arrDetail(i, 1)

For j = 1 To iCol - 1

LvItem.SubItems(j) = arrDetail(i, j + 1)

Next

End If

Next

End With

End Sub

在设计模式下双击CmdSum,输入代码:

Private Sub CmdSum_Click()

Usf_Sum.Show 0

End Sub

简单解释一下代码:

这段代码用于在用户窗体初始化时将 Excel 工作表中的数据填充到列表视图控件中。

Dim 语句声明了几个变量,包括存储工作表数据的数组 arrSum()、arrDetail() 和 TbTitle(),表示列和行的数量的变量 iCol 和 iRow,一个字典变量 DicAccount 和一个列表项变量 LvItem。

On Error Resume Next 语句用于在运行时忽略错误。

使用 UsedRange 属性获取工作表中使用的范围,即非空单元格所在的区域,并将其列数和行数分别存储在 iCol 和 iRow 变量中。

将 arrDetail 数组初始化为包含从单元格 A2 到 iRow 和 iCol 的值。arrDetail 数组将用于填充列表视图控件。

将 TbTitle 数组初始化为包含从单元格 A1 到 iCol 的值。TbTitle 数组将用于填充列表视图控件的列标题。

使用 With 语句引用名为 Me.LvDetail 的列表视图控件,并设置其外观和属性。

使用 For 循环添加列表视图控件的列标题。如果列标题不为空,则使用 ColumnHeaders.Add 方法将其添加到列表视图控件中,并设置列的宽度为 80。

使用 For 循环添加列表视图控件的数据。如果第一列不为空,则创建一个新的列表项并将第一列的值设置为列表项的文本,将其他列的值设置为子项。

上面是AI的解释,请原谅我的懒惰,算了,还是啰嗦几句吧:

.View = lvwReport:应该叫报表视图,就跟我们的excel表格一样,既然这么说,那么一定还有其他视图,由于我不常用到,所以就不浪费口舌去说了,有兴趣的同学自己摸索吧。

添加表头:可以按一个个具体的名称去添加,它有个文本对齐的属性lvwColumnCenter,lvwColumnLeft,lvwColumnRight,看我们的if过程,两条分支语句是一样的,这里暂时留个活口,待有时间再慢慢设置,可以根据不同的表头,通过if语句来分别设置它的宽度,对齐方式等。

添加数据:通过listitems.add的方法添加一条记录,它第一列叫Text,其他列叫subitem,它有个索引值从1开始,我们通过索引值来给它赋值。

On Error Resume Next:容错语句,这里不得不用它了,因为ListView不接受Null值,所以如果有单元格是空的,就会报错。要么把所有Null值都给它替换成别的什么字符,感觉没有那个必要。

今天我们就分享到这里,接下来我会把它做成科目汇总表,再完善一下其他功能。

题外话,我们这里分享的是方法、思路,是为了展示Excel的一些功能,具体到某种实际需求来说,并不一定是最优方案。

比如今天我们说要做“科目汇总表“,我只是借”科目汇总表“这个由头来解释、展示一下ListView的功能,实际上,如果要做一个比较象样的财务软件,我们应该把明细数据放到另外一个地方,比如Access数据库,至少我们使用另外一个excel文件来存放数据,再用一个excel文件来录入、展示数据。这样能相对保证数据的安全性,防止误操作等。扯远了,就此打住(实际上我已经完成了一个相对完美的财务管理系统,就是采用Excel VBA+Access做的,以后有机会慢慢分享给大家!)

技术交流,软件开发,欢迎微信沟通:

皇家推荐

新手必看!24小时自动发卡:如何在卡盟平台轻松充值
faceu激萌怎么拼图
阿根廷公布世界杯23人大名单:伊卡尔迪落选,中超一人
泰坦尼克号沉没事故
win10自带画图工具在哪?win10打开画图工具的三种方法
苹果手机的小太阳怎么调出来