首页 > 解决方案 > 从文件夹中获取文件名从第二个文件开始,而不是从第一个文件开始

问题描述

这是我的 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 中的现有文件名,
我将覆盖最后一个单元格。
解决方案如下

标签: excelvbagetfilenames

解决方案


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

On Error Resume Next

它在您的代码上下文中是无用的。

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

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

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

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


推荐阅读