Excel VBA ListView/Combox控件/CheckBox控件/科目汇总表(3)

yumo6663周前 (09-29)技术文章22

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

前面我们分享了使用ListVeiw进行数据展示,做出“科目汇总表”来(Excel VBA 数据分析展示/ListView控件Excel VBA 数据分析展示/ListView控件/Combox组合框控件/科目汇总表(2)),今天,我们继续完善按月查询、按一级科目查询功能:

添加了一个CheckBox复选框控件CkbLevelOne,Caption改为“一级科目",如果勾选了,则查询一级科目汇总,否则查询明细科目汇总。

添加了一个命令按钮CmdQuery,Catpion改为“查询”。点击它,根据CmbMonth、CkbLevelOne的值,更新科目汇总表数据,代码如下:

Private Sub CmdQuery_Click()
    With Me.LvSum
        .ColumnHeaders.Clear
        .ListItems.Clear
    End With
    currMonth = Me.CmbMonth
    If Me.CkbLevelOne Then
        Call UpdateDataTopLevel
    Else
        Call UpdateData
    End If
    Me.LvSum.Refresh
End Sub

代码比较简单,解析一下:

首先,把LvSum的表头字段、行记录都给清除了,否则多次执行数据就会重复。

然后,把模块级变量currMonth 的值更新为月份列表框的当前值。

接着,根据CheckBox的勾选状态来确定运行不同过程。

最后,刷新一下LvSum,否则可能会有重影。

然后,把代码进行优化:

一、把UserForm_Initialize()里面数据处理的部分拎出来做一个单独的过程,Private Sub UpdateData(),用于汇总“明细科目",供其他过程调用。

二、复制Private Sub UpdateData()模块,稍加修改变成另一个过程,Private Sub UpdateDataTopLevel(),用于汇总“一级科目",基本上跟UpdateData()一样,仅做了细微改动,大的框架结构是完全一样的,其实也可以合并到一个过程里,这里暂时就这样简单处理,我们也可以看到,就作了以下改动:

"科目_编码"改为“1级",后面根据字典的Keys来取得科目编码、科目名称的代码都不需要修改,

 DicAccount(arrDetail(i, Pxy(TbTitle, "科目_编码", 2))) = 1
DicAccount(arrDetail(i, Pxy(TbTitle, "1级", 2))) = 1

科目代码的比较,把科目代码取前4位就是一级代码:

 For j = 1 To UBound(arrSelect, 1)
            If arrSelect(j, PosCode) = arrCode(i - 1) Then
 For j = 1 To UBound(arrSelect, 1)
            If Left(arrSelect(j, PosCode), 4) = arrCode(i - 1) Then

这里我觉得值得注意的是,我们要善于发现数据的规律,而且我们在设计数据的时候,要保持相对一致性,比如科目编码和科目名称的连接,我们中间统一用“_",诸如此类,我就不多啰嗦了,大家自己摸索、体会吧。

三、修改添加表头的一处错误,数组的下标不对:

  For i = 0 To UBound(sTbTitle)       '添加表头,金额列设置右对齐
            If sTbTitle(1, i) <> "" Then
For i = 0 To UBound(sTbTitle)       '添加表头,金额列设置右对齐
            If sTbTitle(i) <> "" Then

由于原来的过程中,有On Error Resume Next语句,在运行的时候就没有报错,后来在新的UpdateData过程中,没有加这条语句,它就报错了。这里用if语句主要是避免表头字段出现空值,实际上也可以不用if判断,如果能确定数组里没有空值的话。

四、对按明细、按一级查询,分别设置LvSum的表头字段宽度,同时Usf_Sum的宽度跟随调整。

五、当我们点选CmbMonth月份列表框的时候,可以使用它的Change事件来即时更新LvSum的数据,这里我们没有这样做。如果需要这样做的话,可以把CmdQuery下的代码复制到CmbMonth的Change事件里,或者输入代码Call CmdQuery_Click,就是去点击一下查询按钮。我把相关代码放到其Change事件里,但是注释掉了。

其他好象就没什么了,就这样吧。

好,今天就分享到这,我们下期再会。


☆猜你喜欢☆

Excel VBA 这样酷炫的日期控件,你不想要吗?

Excel VBA 最简单的收发存登记系统

Excel 公式函数/数据验证/动态下拉列表

Excel VBA 文件批量改名

Excel 公式函数/数据透视表/固定资产折旧计提表!

Excel VBA 输入逐步提示/TextBox+ListBox


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

相关文章

办公小技巧:一键输入选择性符号_选择 符号

在Excel中录入数据时,有时要用到带小方框的对勾或叉号,以表示“是”或“否”的选择。一般情况下,采用表单的复选框控件可以实现这种效果,但比较麻烦。也有人利用“Wingdings 2”字体,通过手工输...

Excel应用——添加复选框_如何在excel中添加复选框

不知道,大家在工作中有没有用到过复选框。复选框是一种可同时选中多项的基础控件,一般出现在表格的项目点选和动态图表的制作上。如下图复选框一、复选框的创建步骤:1、打开EXCEL表格,点击“开发工具”2、...

jquery获取选中的checkbox复选框的值

jquery获取选中的checkbox复选框的值:checkbox复选框是常用的表单元素之一,既然使用,一般就要获取选中的复选框的值,下面就介绍一下如何使用jQuery实现此功能。代码实例如下:htm...

系统小技巧:深入用好Windows 10输入设置

使用Windows 10,光靠点击鼠标远远不够,我们使用键盘的时间可能会更多,复杂程度也更深。就效率而言,键盘使用技能对输入的影响要比鼠标更大。为了提高输入效率,Windows 10在键盘输入设置方面...

Windows 电脑必备!这 3 款文件搜索神器,助你 1 秒精准定位文件

请你想象这样一只行李箱,由于使用者不善整理、或者物品实在太多太杂,甚至是很多连主人也不认识的东西都放在了里面的缘故,现在想从它里面找到想要的东西已经变得十分困难。现实中,很多人的电脑就是像这个描述中的...

系统小技巧:不连续文件多重选择技巧多

在Windows 10文件资源管理器中选择文件,如果要选择的项目非常多且不连续排列,除了传统的Ctrl或Shift加鼠标点击,还有什么好办法呢?1. 巧用反向选择 提高选择效率如果要选择的文件多于不被...