2017-02-27 152 views
-8

我有這樣的VBA代碼來算不在所有零創先爭優保存在一個文件夾中的文件中的所有值,並在包含宏worbook打印出結果。我遇到的問題是它一遍又一遍地打開同一個文件(第一個文件)而不是移動到下一個文件。循環遍歷文件夾中的文件和COUNTIF

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

讓我們瞭解您已經嘗試過,你在哪裏卡住等這是沒有代碼編寫服務 – gizlmo

+0

堆棧溢出不是我的網站的代碼。請發佈您嘗試過的代碼無效。 –

+0

第二次調用dir應該只是'Dir()'(無參數) – Shadow

回答

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