这是我的vba脚本:
Sub ListAllFiles()
With Application.FileDialog(msoFileDialogFolderPicker)
.AllowMultiSelect = False
If .Show = -1 Then
selectDirectory = .SelectedItems(1)
dFileList = Dir(selectDirectory & Application.PathSeparator & "*")
Do Until dFileList = ""
On Error Resume Next
Cells(nextRow, 1) = dFileList
nextRow = nextRow + 1
dFileList = Dir
Loop
End If
End With
End Sub
我目前不明白为什么文件夹包含20个文件。脚本开始从第二个文件中获取文件名,直到到达最后一个文件,并且始终跳过第一个文件。
我试着从:
nextRow = nextRow + 1
dFileList = Dir
至:
dFileList = Dir
nextRow = nextRow + 1
但这不会有任何改变。也尝试从SelectedItem(1)更改为SelectedItem(0),但我收到了错误。接下来,我尝试将Cells(nextRow,1) = dFileList改为Cells(nextRow,0) = dFileList
提前感谢!
编辑:i是在Do之前添加的,直到
nextRow = Cells(Rows.Count, 1).End(xlUp).Row + 0
但是,如果我想再次获得所有文件而不删除列A中的现有文件名
我在覆盖最后一个单元格。
解决方案如下
发布于 2020-09-10 03:09:44
您的问题似乎是下一个代码行:
On Error Resume Next
它在您的代码上下文中是无用的。
只有Cells(nextRow, 1) = dFileList
不允许您第一次看到 返回错误,因为nextRow = 0
。而您的迭代只在第二个文件中继续,当nextRow
已经是1时,返回一个正确的范围..。
为了检查这一点,请尝试在Debug.Print dFileList
之前插入On Error Resume Next
。您还将在Immediate Window
(在VBE -Ctrl + G
中)中看到第一个文件名。
尝试使用nextRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
您的方法(nextRow = Cells(Rows.Count, 1).End(xlUp).Row + 0
)使代码返回所有文件名,但它覆盖了A:一个列上的最后一个现有值.
https://stackoverflow.com/questions/63828069
复制相似问题