我有这个VBA代码来计算保存在文件夹中的所有excel文件中的所有非零值,并在包含宏的worbook中打印出结果。我遇到的问题是它一遍又一遍地打开同一个文件(第一个)而不是移动到下一个文件。
Sub RealCount()
Dim file As String
Dim row As Integer
Dim wb As Workbook
row = 2
file = Dir("\\Daglig rapport\KPI Marknadskommunikation\FEB\*.xl??")
Do While file <> ""
Set wb = Workbooks.Open("\\Daglig rapport\KPI Marknadskommunikation\FEB\*.xl??")
Call ZeroCount
file = Dir("\\Daglig rapport\KPI Marknadskommunikation\FEB\*.xl??")
Loop
End Sub
答案 0 :(得分:0)
以下是一些让它发挥作用的建议:
path
变量保留文件夹位置并使代码更易于阅读Workbooks.Open
,因此参数应该是实际的文件路径(我很惊讶Excel的Workbook.Open
实际上可以使用通配符,如*
或?
)ZeroCount
是否未调用任何Dir
个功能。如果这样做,那么Excel可能会重置您调用Dir
以正确获取循环中下一个文件的能力。如果您发现这种情况正在发生,并且您必须在此循环内部完全调用Dir
,那么您可以首先遍历所有Dir
值并将它们存储到数组中。然后创建另一个遍历该数组的循环,该数组调用ZeroCount
(或任何需要在其中使用Dir
的代码)以下是前两点的一个例子:
Sub RealCount()
Dim path as String
Dim file As String
Dim row As Integer
Dim wb As Workbook
path = "\\Daglig rapport\KPI Marknadskommunikation\FEB\"
row = 2
file = Dir(path & "*.xl??")
Do While file <> ""
Set wb = Workbooks.Open(path & file)
Call ZeroCount
row = row + 1 ' I assume you want to increment row each time as well maybe?
file = Dir()
Loop
End Sub
Dir
的更多示例 - 请参阅此处:http://www.exceltrick.com/formulas_macros/vba-dir-function/