|
主要是由于汇总明细时把行都删除后,名称定义不到对应区域引起的。两个办法解决:
1、汇总明细后把明细重新定义一下(我在代码中已补充进去。但我重新用公式后发现计算出错,可能是数据源中有文本型内容引起的。
2、直接用代码计算汇总。- Sub 汇总各表数据()
- Dim N As Integer, M As Integer, A As Integer
- With Sheets("明细汇总")
- .Rows("2:65536").Delete
- For N = 1 To 7 '要合并的工作表编号
- M = Sheets(N).[A65536].End(xlUp).Row 'A列的最后一个单元格所在的行号
- For k = M To 2 Step -1
- If Len(Sheets(N).Cells(k, 1)) > 0 Then Exit For
- Next
- If k >= 2 Then
- b = .[A65536].End(xlUp).Row + 1 '目标位置空1行
- Sheets(N).Rows(2 & ":" & k).Copy ' 从第2行开始复制各表数据到新工作台表中
- .Cells(b, 1).PasteSpecial Paste:=xlPasteValues
- .Cells(b, 1).PasteSpecial Paste:=xlPasteFormats
- End If
- Next N
- '重新定义名称,酌情使用。。。。。。。。。。。。。。。
- ' .Range("N2:N30000").Name = "补给工时"
- ' .Range("B2:B30000").Name = "申请日期"
- ' .Range("A2:A30000").Name = "生产车间"
- End With
- End Sub
- Sub 计算总表()
- Set d = CreateObject("scripting.dictionary")
- arr = Sheets("明细汇总").[a1].CurrentRegion
- For i = 2 To UBound(arr)
- xkey = arr(i, 1) & Month(arr(i, 2))
- d(xkey) = d(xkey) + Val(arr(i, 14))
- Next
- With Sheets("总表")
- For i = 3 To 9
- xkey = .Cells(i, 1) & .[b1]
- .Cells(i, 2) = d(xkey)
- Next
- End With
- End Sub
复制代码 |
|