excel - 遍历子目录并打开这些目录中的文件
问题描述
已解决:修复了 C:\ 上的扫描问题 -
这实际上是由定义 FolderPath 的代码引起的,该代码是使用Range("L4").Value
但应该被拉出的
ThisWorkbook.Sheets("Database").Range("L4").Value
所以下面的代码实际上没有任何问题。抱歉没有给你完整的信息!
我正在尝试编写一些执行以下操作的 VBA 代码:
- 查找指定路径和子目录中的所有 *.xlsx 和 *.xlsm 文件
- 以只读方式打开每个
- 将内容复制到当前电子表格,然后关闭文件
- 循环遍历所有文件
我目前正在努力做到这一点。我能得到的最接近的代码来自不久前在此处发布的代码,如下所示(其中 FolderPath 只是“C:\Path\To\Folder\”):
Dim fso, oFolder, oSubfolder, oFile, queue As Collection
Set fso = CreateObject("Scripting.FileSystemObject")
Set queue = New Collection
queue.Add fso.GetFolder(FolderPath)
Do While queue.Count > 0
Set oFolder = queue(1)
queue.Remove 1
For Each oSubfolder In oFolder.SubFolders
queue.Add oSubfolder
Next oSubfolder
For Each oFile In oFolder.Files
Length = InStrRev(oFile, "\")
oFileWB = Right(oFile, Len(oFile) - Length)
'Open the given .xls* file read-only and suppress link update prompt
Workbooks.Open FileName:=oFile, ReadOnly:=True, UpdateLinks:=False
'Get current first empty row of database as first target row
ftr = ThisWorkbook.Worksheets("Database").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
'Copy range from target sheet, from hardcoded cell A7 to AE in the bottom-most occupied row
Workbooks(oFileWB).Sheets("Target Sheet").Range("A7:AE" & Workbooks(oFileWB).Sheets("Target Sheet").Cells(Rows.Count, 1).End(xlUp).Row).Copy
'Paste above range into the first empty cell of the database
ThisWorkbook.Worksheets("Database").Range(ThisWorkbook.Worksheets("Database").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Address).PasteSpecial xlPasteValues
'Get last row of current database after copying data
ltr = ThisWorkbook.Worksheets("Database").Cells(Rows.Count, 1).End(xlUp).Row
'Copy date and filepath of sheet into all rows
ThisWorkbook.Worksheets("Database").Range("AF" & ftr & ":AF" & ltr).Value = Now()
ThisWorkbook.Worksheets("Database").Range("AG" & ftr & ":AG" & ltr).Value = oFile
'Close current file and suppress save changes prompt
Workbooks(oFileWB).Close savechanges:=False
Next oFile
Loop
当这些目录中没有任何内容打开时,这非常有效。但是当这些目录中的一个文件被锁定时,它会吓坏并开始扫描“C:\”而不是“C:\Path\To\Folder\”中的文件。这会导致权限错误,因为它会尝试打开 hiberfile.sys。这对我来说是一个相当关键的问题,因为这个脚本 (a) 需要以完全只读的方式运行,并且 (b) 这些目录中的任何文件都可能在任何给定时间被锁定。
有谁知道我该如何解决这个问题?同样作为一个较小的问题 - 知道如何将其限制为打开 *.xlsx 和 *.xlsm 文件,因为目前它试图绝对打开这些目录中的所有内容?
提前致谢
解决方案
已解决:修复了 C:\ 上的扫描问题 -
这实际上是由定义 FolderPath 的代码引起的,该代码是使用 Range("L4").Value 提取的,但应该是
ThisWorkbook.Sheets("Database").Range("L4").Value
所以下面的代码实际上没有任何问题。抱歉没有给你完整的信息!
使用 Tim 在上述评论中提供的想法修复了指定.xls文件的问题。
推荐阅读
- ios - 使用 MTKView 显示解码的视频流会导致不希望的模糊输出
- java - 两种具有不同参数类型的相同方法
- apache - 将 Apache mod_status 与 Prestashop 1.6 一起使用(错误 404)
- apache-kafka - 为什么 Kafka 在 ambari 安装上失败了?
- javascript - 访问数组的单个元素的最佳实践
- npm - Yocto recipe 无法安装 npm 包
- java - Java休眠OneToOne:哪一方应该是所有者
- sql - 在连接查询中使用 dataviewgrid 更新数据库
- python - 如何打开和读取多个 .txt 文件
- c# - 基于 linq 查询中的三元条件分配对象属性