VBA返回来自不同工作簿的范围值的总和
我正在尝试在Excel工作表中使用VBA(让我们称之为wbA)来查找另一个工作簿中的单元格范围内的值的总和(让我们调用wbB)。 我曾尝试使用自定义的求和function
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范围的总和
我如何编写代码来findwbB范围的总和谢谢
您的代码适用于我提到的更改。 这是我的尝试
当您指定一个范围而没有完全限定它的范围时,它将始终引用活动工作表。 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
对于那些仍然在寻找单线解决scheme的人来说:
Cells(10, 1) = WorksheetFunction.Sum(Worksheets("data").Range(Worksheets("data").Cells(3, 35), Worksheets("data").Cells(131, 35)))
刚刚从我的代码中,它通过单元格来解决范围,但是您可以轻松使用RANGE("...")
而不是CELLS(,)
函数)。
上面的示例行将工作表“数据”( range("AI3:AI131")
)的总和写入当前工作表的A10。