【问题标题】:Take filenames from folder starts from the second file instead from the first从文件夹中获取文件名从第二个文件而不是从第一个文件开始
【发布时间】:2020-09-10 10:47:55
【问题描述】:

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

【问题讨论】:

    标签: excel vba get filenames


    【解决方案1】:

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

    On Error Resume Next
    

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

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

    为了检查这一点,请尝试在 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) 使代码返回所有文件名,但它覆盖了 A:A 列上的最后一个现有值...

    【讨论】:

      猜你喜欢
      • 2021-12-11
      • 2017-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-04
      相关资源
      最近更新 更多