excel学习库

excel表格_excel函数公式大全_execl从入门到精通

Excel VBA 数据分析展示/ListView控件

本文于2023年4月17日首发于本人同名公众号:Excel活学活用,更多文章敬请关注

前面我们分享了使用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 WithEnd Sub

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

Private Sub CmdSum_Click()    Usf_Sum.Show 0End Sub

简单解释一下代码:

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

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

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

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

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

  5. TbTitle 数组初始化为包含从单元格 A1iCol 的值。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开始,我们通过索引值来给它赋值。

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

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

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

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

本文使用 文章同步助手 同步,本文于2023年4月17日首发于本人同名公众号:Excel活学活用,更多文章敬请关注

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2024年12月    »
1
2345678
9101112131415
16171819202122
23242526272829
3031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
      友情链接