VBA返回来自不同工作簿的范围值的总和

时间:2013-11-27 12:12:44

标签: excel vba excel-vba

我正在尝试在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中的范围总和 感谢

2 个答案:

答案 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