【发布时间】:2021-08-20 20:59:09
【问题描述】:
我想将文件和子文件夹列出到带有 vba 宏的 Excel 工作表中。列表正在运行,但最后一个文件夹的最后一个文件移动到列表中实际文件夹的第一位。
这里是代码:
If selectedFolder.Files.Count = 0 Then
For Each origSubFolder In selectedFolder.SubFolders
'Create backup subfolder
copiedSubFolder = copiedFilesDir & "\" & origSubFolder.Name & affix
fso.CreateFolder copiedSubFolder
'Recording folders to Excel file
rfSht.Range("C" & r).Value = origSubFolder
rfSht.Range("M" & r).Value = copiedSubFolder
r = r + 1
For Each File In origSubFolder.Files
'Save As original files as xlsx
fileName = fso.GetFileName(File)
fileNameWOExt = Left(fileName, (InStrRev(fileName, ".", -1, vbTextCompare) - 1))
'fileNameWOExt = Left(fileName, InStr(fileName, ".") - 1)
fileNameWAffix = fileNameWOExt & affix
Set owb = Workbooks.Open(File)
owb.SaveAs fileName:=copiedSubFolder & "\" & fileNameWAffix, FileFormat:=51
ActiveWorkbook.Close
'Recording files to Excel file
rfSht.Range("D" & r).Value = File
rfSht.Range("N" & r).Value = copiedSubFolder & "\" & fileNameWAffix & ".xlsx"
r = r + 1
Next
Next
MsgBox "Task completed", vbInformation
Else
我在 for each 循环或“r=r+1”中寻找问题,但总是得到这个。你能帮帮我吗?
【问题讨论】:
-
For Each在哪里保证特定的迭代顺序? (它没有) - 如果你想要一个排序的输出,你需要对输出进行排序。 -
谢谢,但为什么循环将最后一个文件(名称)移动到第一位?漏洞?我不认为。
-
“文件夹中的最后一个文件”不是问题,文件按字母顺序显示在文件资源管理器中如果您按这种方式排序。还是“最后一个文件”是最新的?如果您需要特定的特定顺序,则需要以这种方式对它们进行排序。
标签: excel vba file foreach fso