问题描述
这是我的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
谢谢!
编辑:我是在执行至
nextRow = Cells(Rows.Count,1).End(xlUp).Row + 0
但是如果我想再次获取所有文件而又不删除A列中的现有文件名,那么我将覆盖最后一个单元格。
解决方案如下
解决方法
您的问题似乎是下一个代码行:
On Error Resume Next
在您的代码上下文中它是无用的。
只有{strong>不允许您看到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:A列上的最后一个现有值...