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

问题描述

这是我的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) = dFileListnextRow = 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列上的最后一个现有值...

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...