我使用遞歸函數從磁盤上的文件夾和子文件夾中的文件獲取特定數據。這些數據在我的Excel文件中保存爲一個新行並創建表。它工作正常。但是,如果我創建新文件並將其放入隨機子文件夾中,那麼在啓動遞歸函數後,我想將該數據添加爲之前創建的表中的新行。而不是刪除整個表,然後重複啓動遞歸函數並獲取表中的數據。VBA遞歸函數僅從新文件中獲取數據。
類似刷新按鈕 - 如果點擊它,它會檢查每個文件夾和子文件夾,如果找到一些新文件或文件,請將它們添加到表格的最後一行。
這是現在使用的代碼I'm:
Function Recurse(sPath As String) As String
Dim FSO As New FileSystemObject
Dim myFolder As Folder
Dim mySubFolder As Folder
Dim myFile As File
Dim erow
Dim Black
Dim cislokabla
Set myFolder = FSO.GetFolder(sPath)
For Each mySubFolder In myFolder.SubFolders
For Each myFile In mySubFolder.Files
erow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
GetData myFile, "Sheet1", _
"F1:F2", Sheets("Sheet1").Range(Cells(erow, 1), Cells(erow, 1)), True, False
Black = Sheet1.Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Row
GetData myFile, "Sheet1", _
"O4:O5", Sheets("Sheet1").Range(Cells(Black, 2), Cells(Black, 2)), True, False
cislokabla = Sheet1.Cells(Rows.Count, 3).End(xlUp).Offset(1, 0).Row
GetData myFile, "Sheet1", _
"AH1:AH2", Sheets("Sheet1").Range(Cells(Black, 3), Cells(Black, 3)), True, False
Next
Recurse = Recurse(mySubFolder.Path)
Next
End Function
Sub nacitavaniedat()
Call Recurse("\\Sk-wftkabel\public\Identifikačné listy káblov\káble\")
End Sub
有兩種可能解決方案我想到了一些需要考慮的問題。 **首先根據時間保存文件。**上次調用子文件時存儲信息。再次運行它並檢查如果FileDataTime(myFile)> LastRunTime Then ...添加新數據。這裏的問題 - 如果'myFile'被再次保存,它將會有新的'FileDataTime'並且會再次被附加。 **第二 - 基於文件列表。**在單獨的工作表中保存已處理的所有文件的列表,並在添加新數據之前檢查文件是否已經在列表中。這裏的問題 - 附加操作和工作表保留文件名稱。 –
你需要實現一些邏輯來比較已經存在的*行*和你試圖添加到表中的行。找到一個獨特的因素(對於日期和時間方法,可以使用KazJaw +1,您可以基於此序列化數據)。沒有人會爲你寫這篇文章,除非你親自嘗試並回來告訴我們你卡在哪裏。 – 2014-01-24 08:14:47