0

我有两个工作簿:“测试”和“报告”。我使用了以下代码:

MsgBox Sum_Visible_Cells(Worksheets("Raw Data").Range("M2:M" & LastRow(Worksheets("Raw Data"))))

它在消息框中返回总和值。我还能够在工作簿“TEST”的工作表“原始数据”的单元格中返回总和。

如何让excel返回工作表“Sheet1”中的值,工作簿“报告”上的范围“L9”?

4

2 回答 2

0

是否必须按照您描述的顺序完成?

如果您使用附加链接“VBA 从关闭文件中获取值”中的建议添加 GetValue 函数(公开)以从测试工作簿中检索信息,您将拥有:

在测试工作簿中:

  • 创建一个包含现有公式的范围,例如 Sheet1, Cell A1 Sum_Visible_Cells(Worksheets("Raw Data").Range("M2:M" & LastRow(Worksheets("Raw Data")))) 公式

在 REPORT 工作簿中,使用 Sheet1 Cell L9 中的 GetValue() 函数:

=GetValue(p, f, s, a)

在哪里

  • p = "测试工作簿的路径"
  • f = "测试.xls"
  • s = "表 1"
  • 一个=“A1”
于 2012-05-24T10:41:31.000 回答
0

您不需要 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)
于 2012-05-24T09:13:36.493 回答