在這里發布以防萬一有人遇到類似的問題。不是真的在尋找答案,只是發布以防有人需要解決類似問題。如果有人對正在發生的事情或進一步緩解問題的方法有一些經驗,我會勾選他們的答案。
我需要遍歷一個 .csv 檔案目錄,從每個檔案中檢索一條資訊,然后編譯成一個新的 .xlsx 檔案。我的解決方案基于此執行緒:
遍歷檔案夾中檔案的VBA代碼
我遇到的問題是 Dir() 函式在回圈遍歷所有檔案之前很好地保釋(我有 500 個檔案......它在隨機位置停止,有時在第 18 個,有時在第 90 個,有時在第 97 個)。我花了一段時間才弄清楚發生了什么。顯然,當這個函式正在執行時,我正在做的其他事情(我假設它是我正在撰寫的 Word 檔案)正在告訴宏停止并且沒有錯誤代碼。它只是退出回圈(我正在使用 while -> wend 回圈),留下函式訪問的最后一個檔案打開而不執行 close 陳述句。我通過關閉所有內容并在沒有打開任何其他內容的情況下運行宏來確認這一點,并完成了執行。
因此,如果在檢查目錄中的每個檔案之前 Dir() 函式停止執行時遇到問題,請關閉其他微軟應用程式。他們可能會干擾。
uj5u.com熱心網友回復:
為避免該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
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/319082.html
