过滤/可见列表的返回值,excel VBA

时间:2012-05-24 09:05:53

标签: excel excel-vba vba

我有两本工作簿:“TEST”和“Report”。我使用了以下代码:

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

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

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

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

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

如果您使用附加链接"VBA to get value from closed file"中的建议添加GetValue函数(公开)来检索您将拥有的测试工作簿中的信息:

在TEST工作簿中:

  • 创建一个包含现有公式的范围。 Sheet1,Cell A1 Sum_Visible_Cells(工作表(“原始数据”)。范围(“M2:M”& LastRow(工作表(“原始数据”))))公式

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

=GetValue(p, f, s, a)

其中

  • p =“测试工作簿的路径”
  • f =“TEST.xls”
  • s =“Sheet1”
  • a =“A1”