【发布时间】:2014-06-17 08:17:54
【问题描述】:
请参阅下面的代码,它工作正常,并在给定目录中搜索所有 excel 文件。但我无法理解这段代码
疑问: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-loop 集成到第一个循环中可能会更容易。
-
嗨,我给的路径是“C:\Temp\Sahil”假设有两个文件夹A,B。一个文件夹有一个excel表“A.xlsx”和文件夹C。文件夹C还有一个excel“C.xlsx”。现在文件夹“C:\Temp\Sahil”中的文件夹 B 有一个文件夹“F”和 excel“B.xlsx”。文件夹“F”有excel“F.xlsx”。因此,此代码将通过调用递归函数来命名每个文件夹中的所有 excel。NoOfFolders 数组被重新定义并一次又一次地分配新值。那么它为什么仍然保留价值。以及这段代码是如何工作的。 ——