VBA返回来自不同工作簿的范围值之和
我试图在excel工作表(我们称之为wbA)中使用VBA来查找另一个工作簿(我们称之为wbB)中单元格范围内的值之和。我尝试过使用定制的求和函数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
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:Changerange(“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窗口运行此功能的