从文件夹中获取文件名从第二个文件而不是第一个文件开始
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 列上的最后一个现有值...
这是我的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 列上的最后一个现有值...