Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 4109|回复: 13

[已解决]窗体多条件汇总

[复制链接]
发表于 2016-2-2 15:31 | 显示全部楼层 |阅读模式
垦请老师赐教要如何实现附件中的要求,详情附件中说明。
个人帐套收支查询窗体.rar (550.69 KB, 下载次数: 34)
 楼主| 发表于 2016-2-2 22:23 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2016-2-3 12:08 | 显示全部楼层
假期将至在论坛中的老师也少了,
回复

使用道具 举报

 楼主| 发表于 2016-2-3 13:19 | 显示全部楼层
可能是明细表B列要满足TextBox1:TextBox7及TextBox8:TextBox13的条件比较麻烦。
回复

使用道具 举报

发表于 2016-2-4 15:38 | 显示全部楼层    本楼为最佳答案   
请看附件。
代码还是有改进空间的,可以在打开文件的时候一次性读入公共变量,包括下拉框的选项、各textbox对应的字典值等。

个人帐套收支查询窗体.rar

538.58 KB, 下载次数: 43

评分

参与人数 1 +1 收起 理由
lidayu + 1 很给力

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2016-2-4 16:10 | 显示全部楼层
grf1973 发表于 2016-2-4 15:38
请看附件。
代码还是有改进空间的,可以在打开文件的时候一次性读入公共变量,包括下拉框的选项、各textbo ...

grf1973 老师您好,多次得到您的帮助感激涕零,完美解决了问题,就是看不懂代码,要是您能注释下就更好。
在新春来临之际祝您合家安康、幸福快乐、新年愉快!
回复

使用道具 举报

 楼主| 发表于 2016-2-4 16:24 | 显示全部楼层
grf1973 发表于 2016-2-4 15:38
请看附件。
代码还是有改进空间的,可以在打开文件的时候一次性读入公共变量,包括下拉框的选项、各textbo ...

grf1973 老师您好,还有点小小的要求请您修改下
88888.jpg

回复

使用道具 举报

发表于 2016-2-4 16:33 | 显示全部楼层
自己代码里去改一下呗,原来是s1-s2,改成s2-s1

评分

参与人数 1 +1 收起 理由
lidayu + 1 很给力

查看全部评分

回复

使用道具 举报

发表于 2016-2-4 16:38 | 显示全部楼层
加了注释。
  1. Sub 汇总()
  2.     Arr = Sheets("明细表").[a1].CurrentRegion
  3.     Set dd1 = CreateObject("scripting.dictionary")
  4.     Set dd2 = CreateObject("scripting.dictionary")
  5.     For i = 3 To UBound(Arr)
  6.         mc = Arr(i, 3): xm = Arr(i, 4): lb = Arr(i, 2)     '名称,项目,类别
  7.         x = mc & xm & lb            '以名称+项目+类别 为key
  8.         If Arr(i, 8) > 0 Then dd1(x) = dd1(x) + Arr(i, 8) '累加 收入
  9.         If Arr(i, 9) > 0 Then dd2(x) = dd2(x) + Arr(i, 9) '累加 支出
  10.     Next
  11.    
  12.     mc = Me.ComboBox1     '名称
  13.     xm = Me.ComboBox2     '项目
  14.     For i = 3 To 8
  15.         lb = Me.Controls("Label" & i).Caption     '类别(Label3--Label8的Caption)
  16.         x = mc & xm & Replace(lb, " ", "")          '以名称+项目+类别 为key
  17.         Me.Controls("TextBox" & i - 2).Value = dd1(x)      'Label3--Label8对应的TextBox1--TextBox6的值
  18.         s1 = s1 + dd1(x)
  19.         
  20.         lb = Me.Controls("Label" & i + 7).Caption       '类别(Label10--Label15的Caption)
  21.         x = mc & xm & Replace(lb, " ", "")
  22.         Me.Controls("TextBox" & i + 5).Value = dd2(x)         'Label10--Label5对应的TextBox8--TextBox13的值
  23.         s2 = s2 + dd2(x)
  24.     Next
  25.     If s1 > 0 Then Me.TextBox7 = s1 Else Me.TextBox7 = ""
  26.     If s2 > 0 Then Me.TextBox14 = s2 Else Me.TextBox14 = ""
  27.     Me.TextBox15 = s2 - s1
  28. End Sub
复制代码

评分

参与人数 1 +1 收起 理由
lidayu + 1 赞一个

查看全部评分

回复

使用道具 举报

发表于 2016-2-4 16:40 | 显示全部楼层
第2--第10句完全可以一次性读入后,通过公共变量参数的方式传递。反正速度影响不大,干脆每次下拉框变动的时候都读一遍。

评分

参与人数 1 +1 收起 理由
lidayu + 1 很给力

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-3-28 19:32 , Processed in 0.468557 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表