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 工作表中的数据填充到列表视图控件中。

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

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

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

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

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

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

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

  8. 使用 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做的,以后有机会慢慢分享给大家!)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xwLink1996

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值