我有两个工作簿:“测试”和“报告”。我使用了以下代码:
MsgBox Sum_Visible_Cells(Worksheets("Raw Data").Range("M2:M" & LastRow(Worksheets("Raw Data"))))
它在消息框中返回总和值。我还能够在工作簿“TEST”的工作表“原始数据”的单元格中返回总和。
如何让excel返回工作表“Sheet1”中的值,工作簿“报告”上的范围“L9”?
是否必须按照您描述的顺序完成?
如果您使用附加链接“VBA 从关闭文件中获取值”中的建议添加 GetValue 函数(公开)以从测试工作簿中检索信息,您将拥有:
在测试工作簿中:
在 REPORT 工作簿中,使用 Sheet1 Cell L9 中的 GetValue() 函数:
=GetValue(p, f, s, a)
在哪里
您不需要 vba 来执行此操作。在单元格中Sheet1!L9
输入公式
=SUBTOTAL(109,'Raw Data'!$M:$M)
要在 VBA 中使用
Application.Workbooks("Report.xlsm").Worksheets("Sheet1").Range("L9") = "Result of your function"
注意:您必须包含文件扩展名,并且工作簿必须是打开的。
编辑:
Sum_Visible_Cells
不是工作表函数。
试试这个(假设代码在工作簿中Test
)
Application.Workbooks("Report.xlsm").Worksheets("Sheet1").Range("L9") = _
Application.WorksheetFunction.Subtotal(109, ThisWorkbook.Worksheets("Raw Data").Columns(13))
从您的评论Range("M2:M)
中,我猜您想从总数中排除第 1 行。
只要M1
不是对整列进行数字求和就可以了。如果第 1 行是数字并且您想排除它,请尝试
Dim rng as Range
With ThisWorkbook.Worksheets("Raw Data")
Set rng = .Range(.Cells(2,13), .Cells(.Rows.Count, 13).End(xlUp))
End With
Application.Workbooks("Report.xlsm").Worksheets("Sheet1").Range("L9") = _
Application.WorksheetFunction.Subtotal(109, rng)