[英]Looping through and opening a directory of files with Excel VBA Dir() function quitting early
在這里發布以防萬一有人遇到類似的問題。 不是真的在尋找答案,只是發布以防有人需要解決類似問題。 如果有人對正在發生的事情或進一步緩解問題的方法有一些經驗,我會勾選他們的答案。
我需要遍歷一個 .csv 文件目錄,從每個文件中檢索一條信息,然后編譯成一個新的 .xlsx 文件。 我的解決方案基於此線程:
我遇到的問題是 Dir() 函數在循環遍歷所有文件之前很好地保釋(我有 500 個文件......它在隨機位置停止,有時在第 18 個,有時在第 90 個,有時在第 97 個)。 我花了一段時間才弄清楚發生了什么。 顯然,當這個函數正在執行時,我正在做的其他事情(我假設它是我正在編寫的 Word 文檔)正在告訴宏停止並且沒有錯誤代碼。 它只是退出循環(我正在使用 while -> wend 循環),留下函數訪問的最后一個文檔打開而不執行 close 語句。 我通過關閉所有內容並在沒有打開任何其他內容的情況下運行宏來確認這一點,並完成了執行。
因此,如果在檢查目錄中的每個文件之前 Dir() 函數停止執行時遇到問題,請關閉其他微軟應用程序。 他們可能會干擾。
為避免Dir
錯誤,請先收集文件,然后再處理它們。 不要在調用Dir
之間做任何與辦公室相關的事情。
Option Explicit
' Get the files specified
Function GetFiles(MyFolder As String) As Variant
Dim MyFile As Variant, Files As Variant
Dim NumFiles As Long, Idx As Long
' Collect files only and ignore folders
MyFile = Dir(MyFolder)
NumFiles = 0
Do While MyFile <> ""
NumFiles = NumFiles + 1
If NumFiles = 1 Then
ReDim Files(1 To 1)
Else
ReDim Preserve Files(1 To NumFiles)
End If
Files(NumFiles) = MyFile
MyFile = Dir()
Loop
GetFiles = Files
End Function
Sub ProcessFiles(MyFolder As String)
Dim MyFile As Variant
Dim Files As Variant
Dim Idx As Long
Files = GetFiles(MyFolder)
If Not IsEmpty(Files) Then
For Idx = LBound(Files) To UBound(Files)
MyFile = Files(Idx)
' Process the file here
Debug.Print MyFile
Next Idx
Else
Debug.Print "No files found for Dir(""" & MyFolder & """)"
End If
End Sub
Sub TestProcessFiles()
ProcessFiles "C:\windows\*.*"
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.