excel 返回筛选/可见列表的和值

wsewodh2  于 2022-12-14  发布在  其他
关注(0)|答案(2)|浏览(122)

我有两本练习册:“TEST”和“Report”。我使用了以下代码:

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

并且它在消息框中返回和值。我还能够在工作簿“测试”中的工作表“原始数据”上的单元格中返回和值。
如何使Excel返回工作簿“报表”上工作表“Sheet1”、范围“L9”中的值?

o0lyfsai

o0lyfsai1#

必须按照您描述的顺序进行吗?
如果您使用所附链接"VBA to get value from closed file"中的建议添加GetValue函数(make public)以从测试工作簿中检索信息,您将获得:
在测试工作簿中:

  • 创建包含现有公式的区域例如Sheet1,单元格A1Sum_Visible_Cells(工作表(“原始数据”).Range(“M2:M”& LastRow(工作表(“原始数据”))))公式

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

=GetValue(p, f, s, a)

其中

  • p =“测试工作簿路径”
  • f =“测试. xls”
  • s =“工作表1”
  • a =“A1”
dbf7pr2w

dbf7pr2w2#

您不需要使用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)

相关问题