如果我想对工作表中的一组单元格求和,可以使用以下公式:
要在子程序中执行此操作,我会使用以下代码:
在VBA中,这行代码失败了,正如在VBA中指定跨表的Excel范围中所解释的那样。
=SUM(Sheet1!A1:A10)
要在子程序中执行此操作,我会使用以下代码:
在子程序中实现:
Sub example1()
Dim r As Range, v As Variant
Set r = Sheets("Sheet1").Range("A1:A10")
v = Application.WorksheetFunction.Sum(r)
End Sub
然而,如果我想在多个工作表中累加单个单元格,则使用以下公式:
=SUM(Sheet1:Sheet38!B2)
在VBA中,这行代码失败了,正如在VBA中指定跨表的Excel范围中所解释的那样。
Sub dural()
v = Application.WorksheetFunction.Sum("Sheet1:Sheet3!B2")
End Sub
我有两个解决方法。我可以通过编写循环程序来计算总和:
Sub example2()
Dim i As Long
Dim v As Variant
v = 0
For i = 1 To 38
v = v + Sheets(i).Range("B2")
Next i
End Sub
或者使用 Evaluate()
:
v = Evaluate("Sum(Sheet1:Sheet3!B2)")
这个计算可以使用Application.WorksheetFunction.Sum()
吗?还是应该坚持使用循环?
Set r = Sheets("Sheet1").Range("Sheet1:Sheet3!B2")
然后对r
进行Sum
吗?或者类似的操作...无论你需要做什么来从工作表中创建一个范围。不过,你可能最好使用其他方法之一。 - gmileyEvaluate()
,而且它运行得很好……但是如果我必须基于动态范围(在所有工作表上相同)进行计算,则需要额外的步骤来生成我必须提供给Evaluate()
的字符串。 - Gary's Studentv = Evaluate("Sum(START:FINISH!B2)")
。 - Scott Cranerrng
,那么代码将是v = Evaluate("Sum(START:FINISH!" & rng.Address(1,1) & ")")
。请注意,我的翻译尽力使句子通俗易懂,但并未改变原意。 - Scott Craner