請在下面的代碼中查看其工作正常並在給定目錄中搜索所有excel文件。但我無法理解此代碼在給定的文件夾或目錄中搜索所有excel文件的VB代碼
疑問:NoOfFolders(Iterator1
)是一個動態數組,當再次函數被稱爲fnFolderStructure
時,NoOfFolders
數組又被創建。但是,即使值NoOfFolders(0)
和NoOfFolders(1
)也發生了變化,但仍然在以前值重新調用其值時。
即使在編寫NoOfFolders(Iterator1)
後,它如何保留值。
fnCheckFiles("C:\Temp\Sahil")
Function fnFolderStructure(sAddress)
i=0
Dim NoOfFolders()
Set objFSO1 = CreateObject("Scripting.FileSystemObject")
Set objFolder2 = objFSO1.GetFolder(sAddress)
Set FolderIn=objFolder2.SubFolders
Set FileIn=objFolder2.Files
' If FileIn.Count>0 Then
' fnCheckFiles(sAddress)
' End If
If FolderIn.Count>0 Then
y=FolderIn.Count
ReDim NoOfFolders(y-1)
For Each objSubfolder in FolderIn
NoOfFolders(i)= objSubfolder.Name
i=i+1
Next
For Iterator1 = 0 To y-1
sPath1=sAddress&"\"&NoOfFolders(Iterator1)
fnCheckFiles(sPath1)
Next
' Set colSubfolders = FolderIn.Subfolders
' Call fnFolderStructure(sPath1)
End If
End Function
Function fnCheckFiles(sAddress)
Set objFSO1 = CreateObject("Scripting.FileSystemObject")
Set objFolder4 = objFSO1.GetFolder(sAddress)
''sFileName=objFolder4.Name
For Each objFile In objFolder4.Files
sFileName=objFile.Name
if (InStr(1,sFileName,"xlsx",1)) then
msgbox objFile.Name
End IF
Next
if objFolder4.SubFolders.Count>0 then
fnFolderStructure(sAddress)
End if
End Function
我不知道如果我滿你理解你的問題,但是如果你重新設定一個數組並且你想保留現有的值,你需要使用redim preserve。除此之外,是否需要將名稱存儲在數組中 - 如果除了在for循環中使用它們以外的任何其他內容,您可能會更容易將for-iterator循環集成到第一個循環中。 –
嗨,我給出的路徑是「C:\ Temp \ Sahil」假設有兩個文件夾A,B。一個文件夾有一個excel表「A.xlsx」和文件夾C.文件夾C有一個excel「C.xlsx」。現在文件夾「C:\ Temp \ Sahil」中的文件夾B有一個文件夾「F」和excel「B.xlsx」。並且文件夾「F」具有優秀的「F.xlsx」。因此,這段代碼將通過調用遞歸函數來命名每個文件夾中的所有excel。並且重新定義NoOfFolders數組並重新賦值new。那麼它如何保持其價值?以及這段代碼如何工作。 - – Sahil