我有一个宏来创建一个工作簿,其中包含多个按日期命名的工作表,例如2015年12月12日,12-02-2015。数据手动输入到这些工作表中。最后一个工作表名称是" TOTAL"。每个月工作表的数量和名称都会有所不同。我正在尝试编写一段代码,将所有工作表中的数据汇总到工作表中名为" Total"的单元格中。我的想法是使用循环来完成它,但它不起作用,尽管宏运行时没有显示错误消息。 应该出现在" B2"中的公式" Total"宏完成运行后的工作表不存在,所以我的假设是求和仅在宏执行期间有效。我不知道如何进入"总和"公式进入" B2" " Total"工作表。我真的很感激能够指出正确方向的任何提示。下面是一段不起作用的代码:
Sub Test()
Dim i as Long
For i = 1 To Worksheets.Count - 1
Worksheets("TOTAL").Range("B2").Formula = Application.WorksheetFunction.Sum(Worksheets(i).Range("B2"))
Next i
Worksheets(i).Range("B2").Value = Worksheets("TOTAL").Range("B2").Value
End Sub
答案 0 :(得分:2)
您可以定义自定义的用户定义函数(UDF),该函数在单元格中输入时,会对同一工作簿中所有其他工作表中的相应单元格进行汇总。我们称之为AutoSum
:
Function AutoSum() As Variant
AutoSum = 0
For Each ws In Worksheets
If Not ws Is Application.ThisCell.Parent Then AutoSum = AutoSum + ws.Range(Application.ThisCell.Address)
Next
End Function
然后您可以在公式中的任何单元格中使用它:=AutoSum()
答案 1 :(得分:0)
试试这个;
Sub Test()
Dim i As Long
Dim t As String
For i = 1 To Worksheets.Count - 1
If i = 1 Then
t = "=Sum('" & Worksheets(i).Name & "'!B2"
Else
t = t & ",'" & Worksheets(i).Name & "'!B2"
End If
Next i
Worksheets("TOTAL").Range("B2").Formula = t & ")"
End Sub
它构建公式,因为它循环然后将公式分配给单元格。