早上好,
我正在寻找可能的替代方案来替换当前将数据从多个“单元”工作簿导入“主”工作簿的系统。我的每个“单元”工作簿都是从固定模板构建的,因此它们的工作表名称和单元格引用始终相同。 (工作表名称为:Jan,Feb,Mar,Apr,... Dec)(文件名为:YYYY_Location_Description)
理想情况下,我希望能够通过所有打开的工作簿文件简单地执行sumproduct。我知道我可以通过使用Jan:Dec!A2:D5的表单来完成。但有没有办法调整它来运行所有打开的工作簿文件?
目前我有一个系统地运行DIR列出的所有文件的宏,并将数据从“单位”表中一次复制一个条目并将其粘贴到摘要表中。
每月“单位”表单包含一个月中每天的行和显示的列:
UnitA
Date HrsA HrsB ValueA ValueB ValueC ...
1 24 0 0.01 0.02 0.01
2 0 24 0.01 0.015 0.012
...
然后将宏复制的数据放在以下格式中:
Master
Date Location Value HrsA HrsB Entry
1 UnitA ValueA 24 0 0.01
1 UnitA ValueB 24 0 0.02
1 UnitA ValueC 24 0 0.01
1 UnitA ValueA 0 24 0.01
1 UnitA ValueB 0 24 0.015
1 UnitA ValueC 0 24 0.012
“主”摘要表中有很多数据。我宁愿做的是:
=sum('[Workbook1.xls:WorkbookN.xls]Jan:Dec'!$A$2:$D$5)
有可能做这样的事吗?
谢谢,
答案 0 :(得分:0)
尝试这样的操作,只需遍历每个打开的工作簿并评估指定范围的Sum
,然后将该值写入ActiveCell(或者需要放置的位置)
Sub foo()
Dim wb as Workbook
Dim ret
For Each wb in Application.Workbooks
'[Workbook1.xls:WorkbookN.xls]Jan:Dec'!$A$2:$D$5)
ret = ret + Application.WorksheetFunction.Sum( _
"'[" & wb.Name & "]Jan:Dec'!$A$2:$D$5")
Next
ActiveCell.Value = ret
End Function
或者尝试使用它来构建公式字符串:
Sub foo(Optional sheetRange As String = "Jan:Dec", Optional cellsRange As String = "A2:D5")
Dim wb As Workbook
Dim ret
For Each wb In Application.Workbooks
ret = ret & "SUM('[" & wb.Name & "]" & sheetRange & "'!" & cellsRange & ")+"
Next
ret = Left(ret, Len(ret) - 1)
ret = "=" & ret
ActiveCell.Formula = ret
End Sub