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。