|
重新改了一下程序,两个改动:
1、C2单元格发生改变后,S6,T6单元格随之改变。
2、直接通过判断“物资数据库”的“统计月份”是否在起止日期间确定是否统计。
代码如下:- Private Sub Worksheet_Change(ByVal Target As Range) 'C2单元格发生改变后,S6,T6单元格随之改变。
- If Target.Address <> [c2].Address Then Exit Sub
- YF = Target '月份
- If Val(YF) > 0 Then '根据C2判断统计的起始月、终止月
- smonth = Val(YF): emonth = Val(YF)
- ElseIf YF = "一季度" Then
- smonth = 1: emonth = 3
- ElseIf YF = "二季度" Then
- smonth = 4: emonth = 6
- ElseIf YF = "三季度" Then
- smonth = 7: emonth = 9
- ElseIf YF = "四季度" Then
- smonth = 10: emonth = 12
- ElseIf YF = "年度" Then
- smonth = 1: emonth = 12
- End If
- maxday = Day(DateSerial(Year(Date), emonth + 1, 0)) '取得指定月的最大天数(下一个月的第0天)
- [s6] = DateSerial(Year(Date), smonth, 1) '起始日期
- [t6] = DateSerial(Year(Date), emonth, maxday) '结束日期
- End Sub
- Sub 总账报表生成()
- arr = Sheets("系统参数设置").[b1].CurrentRegion
- Set D = CreateObject("scripting.dictionary")
- For I = 2 To UBound(arr) '把"物资数据库"工作表"部门名称" 和 "科室总账报表"工作表"科室" 用字典联系起来
- D(arr(I, 1)) = arr(I, 2)
- Next
-
- sday = Sheets("科室总账报表").[s6] '统计的起始日期
- eday = Sheets("科室总账报表").[t6] '统计的结束日期
- Set d1 = CreateObject("scripting.dictionary") '读入数据
- arr = Sheets("物资数据库").[a1].CurrentRegion
- For I = 2 To UBound(arr)
- xday = arr(I, 43) '统计月份
- If xday >= sday And xday <= eday Then '只统计在起始日期和结束日期之间的数据
- bm = arr(I, 1): ks = D(bm) '部门-->总帐科室
- XM = arr(I, 44) '项目
- If XM Like "办公用品*" Then XM = "办公用品" '办公用品(文具)=办公用品
- xkey = ks & XM '字典的key:科室+项目
- For j = 2 To 41
- d1(xkey) = d1(xkey) + arr(I, j) '资产原值
- Next
- End If
- Next
-
- With Sheets("科室总账报表")
- .Range("C4:O45").ClearContents
- arr = .[a3:o45]
- For I = 2 To UBound(arr)
- ks = arr(I, 2) '科室
- If Len(ks) > 0 Then
- s = 0
- For j = 3 To 14 'C列到N列
- XM = arr(1, j) '项目
- xkey = ks & XM 'key:科室+项目+年月
- arr(I, j) = arr(I, j) + d1(xkey)
- s = s + arr(I, j)
- Next
- arr(I, 10) = arr(I, 10) + arr(I, 6) + arr(I, 9) '日用五金
- arr(I, 13) = arr(I, 13) + arr(I, 11) + arr(I, 12) '低值易耗品
- arr(I, 15) = arr(I, 15) + s '合计
- End If
- Next
- .[a3].Resize(UBound(arr), UBound(arr, 2)) = arr
- .Cells(39, 3).Resize(1, 13).Formula = "=sum(r4c:r[-1]c)" '计算第39行"小计"
- .Cells(41, 3).Resize(1, 13).Formula = "=sum(r39c:r[-1]c)" '计算第41行"合计"
- .Cells(45, 3).Resize(1, 13).Formula = "=sum(r41c:r[-1]c)" '计算第45行"总计"
- End With
- End Sub
复制代码 |
|