excel - 从文件夹中获取文件名从第二个文件开始,而不是从第一个文件开始
问题描述
这是我的 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
它在您的代码上下文中是无用的。
它只是不会让您第一次看到Cells(nextRow, 1) = dFileList
返回错误,因为nextRow = 0
. 并且您的迭代仅针对第二个文件继续,当nextRow
已经为 1 时,返回正确的范围......
为了检查这一点,请尝试插入Debug.Print dFileList
before 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 列上的最后一个现有值...
推荐阅读
- markdown - markdown 或 md 中的希腊文本
- python - 如何忽略 os.rename 替换中的大小写敏感性
- angular - Ngx-bootstrap modal:如何将数据传递给 modal component.ts 而不是 html 模板?
- elasticsearch - 如何在将输入转换为 json 后摆脱额外的字段和值?
- c# - 在两个域之间模拟用户
- django - Django:单个相关对象描述符已弃用,我该如何替换它?
- pandas - 用 Pandas 过滤掉列
- android - 是否可以在android中提取和检查联系人的数据库文件
- typescript - Redux 可以假设性地推断传递给它的 mapStateToProps 的类型吗?
- javascript - React Native:“通过带有变量 xy z 的 HTTP Post 重定向用户”是什么意思?