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

VBA返回来自不同工作簿的范围值之和,vba,excel,Vba,Excel,我试图在excel工作表(我们称之为wbA)中使用VBA来查找另一个工作簿(我们称之为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.Applicat

我试图在excel工作表(我们称之为wbA)中使用VBA来查找另一个工作簿(我们称之为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"))

但是caluclate和都返回wbA而不是wbB的范围总和

如何编写代码来查找wbB中的范围和
谢谢

您的代码与我提到的更改配合使用。这就是我试过的

指定范围而不完全限定该范围时,该范围将始终引用活动图纸。而
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")
像我一样使用
。打开

编辑


@SiddharthRout是的,我正在excel中的VBA窗口中运行它–用户3041384 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

您的代码与我提到的更改一起工作。这就是我试过的

指定范围而不完全限定该范围时,该范围将始终引用活动图纸。而
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")
像我一样使用
。打开

编辑


@SiddharthRout是的,我正在excel中的VBA窗口中运行它–用户3041384 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

对于仍在寻找单线解决方案的用户:

Cells(10, 1) = WorksheetFunction.Sum(Worksheets("data").Range(Worksheets("data").Cells(3, 35), Worksheets("data").Cells(131, 35)))
仅从我的代码中获取,它按单元格寻址范围,但是您可以轻松地使用
range(“…”
而不是
单元格(,)
函数)


上面的示例行将工作表“数据”(
范围(“AI3:AI131”)
)的总和写入当前工作表的A10。

对于仍在寻找单行解决方案的人员:

Cells(10, 1) = WorksheetFunction.Sum(Worksheets("data").Range(Worksheets("data").Cells(3, 35), Worksheets("data").Cells(131, 35)))
仅从我的代码中获取,它按单元格寻址范围,但是您可以轻松地使用
range(“…”
而不是
单元格(,)
函数)


上面的示例行将工作表“数据”(
range(“AI3:AI131”)
)的总和写入当前工作表的A10。

Birdsview:Change
range(“B5:T9”)
。range(“B5:T9”)
中的
a=sumrrange(range(“B5:T9”)
@SiddharthRout获取“参数非可选”错误哪一行?顺便说一句,您是从excel中运行此命令的吗?将a=sumrange(Range(“B5:T9”))更改为a=sumrange.Range(“B5:T9”))@SiddharthRout是的,我是从ExcelbirdView中的VBA窗口运行此命令的:将
Range(“B5:T9”)
更改为
Range(“B5:T9”)
中的
@SiddharthRout获取一个“非可选参数”哪一行?顺便说一句,您是从excel中运行此功能的吗?将a=sumrange(范围(“B5:T9”))更改为a=sumrange.Range(“B5:T9”))@SiddharthRout是的,我是从excel中的VBA窗口运行此功能的