我正在尝试在Excel工作表中使用VBA(让我们称之为wbA)来查找另一个工作簿中一系列单元格中的值的总和(让我们称之为wbB)。我尝试过使用自定义求和函数
Function sumrange(rng As Range)
summ = 0
For Each cell In rng
summ = summ + cell.Value
Next
sumrange = summ
End Function
我在wbA执行
Sub test4()
Dim app As New Excel.Application
Dim book As Excel.Workbook
Set book = app.Workbooks.Add("...\wbB.xlsm")
With book.Worksheets("November2013")
a = sumrange(Range("B5:T9"))
End With
MsgBox a
End Sub
这将返回wbA中设置范围的总和而不是wbB
我还尝试了以下格式的worksheetfunction.sum选项
l = book.Worksheets("November2013").Application.WorksheetFunction.Sum(Range(B5:T9"))
和
With book.Worksheets("December2014")
p = Application.WorksheetFunction.Sum(Range(B5:T9"))
End With
但是两者都计算并返回wbA而不是wbB
的范围之和如何编写代码以查找wbB中的范围总和 感谢
答案 0 :(得分:3)
对于那些仍在寻找单线解决方案的人:
Cells(10, 1) = WorksheetFunction.Sum(Worksheets("data").Range(Worksheets("data").Cells(3, 35), Worksheets("data").Cells(131, 35)))
刚从我的代码中获取它,它按单元格来解决范围,但您可以轻松使用RANGE("...")
代替CELLS(,)
函数。
上面的示例行将工作表“data”(range("AI3:AI131")
)的总和写入当前工作表的A10。
答案 1 :(得分:1)
您的代码适用于我提到的更改。这就是我试过的
如果指定的范围没有完全限定它,它将始终引用活动工作表。 ActiveSheet
可能不是您期望的表格,因此完全符合您的对象。
Sub test4()
Dim book As Workbook
Dim a
Set book = Workbooks.Open("C:\Book1.xlsx")
a = sumrange(book.Worksheets(1).Range("A1:A4"))
MsgBox a
End Sub
Function sumrange(rng As Range)
summ = 0
For Each cell In rng
summ = summ + cell.Value
Next
sumrange = summ
End Function
我注意到你正在使用
Set book = app.Workbooks.Add("...\wbB.xlsm")
使用.Open
就像我做的那样。
修改强>:
@SiddharthRout是的我从excel的VBA窗口运行它 - user3041384 3分钟前
在这种情况下,您无需定义Excel应用程序。您的代码可以重写为
Sub test4()
Dim book As Workbook, a
Set book = Workbooks.Open("...\wbB.xlsm")
With book.Worksheets("November2013")
a = sumrange(.Range("B5:T9"))
End With
MsgBox a
End Sub