从文件夹中获取文件名从第二个文件而不是第一个文件开始

Take filenames from folder starts from the second file instead from the first

这是我的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

提前致谢!

编辑: 我是在 Do Until

之前添加的
nextRow = Cells(Rows.Count, 1).End(xlUp).Row + 0

但是如果我想再次获取所有文件而不删除 A 列中的现有文件名
,我会覆盖最后一个单元格。
解决方法如下

您的问题看起来是下一行代码:

On Error Resume Next

它在您的代码上下文中没有用。

它只是 不让你看到,第一次,Cells(nextRow, 1) = dFileList return 是一个错误,因为 nextRow = 0。 并且您的迭代仅针对第二个文件继续,当 nextRow 已经是 1 时,return 设置正确的范围...

为了检查,尝试在 On Error Resume Next 之前插入 Debug.Print dFileList。您还将在 Immediate Window(在 VBE 中 - Ctrl + G)中看到第一个文件名。

尝试使用 nextRow = Cells(Rows.Count, 1).End(xlUp).Row + 1

您的方式 (nextRow = Cells(Rows.Count, 1).End(xlUp).Row + 0) 使代码 return 所有文件名,但它覆盖了 A:A 列上的最后一个现有值...