遍历文件夹Excel文件 借助ExecuteExcel4Macro读取关闭文件单元格筛选后存数组
实现方案
你可以先把读取关闭工作簿单元格的逻辑封装成通用函数,再在文件遍历循环中做前置校验,仅符合要求的文件才存入数组,完整实现如下:
第一步:封装单元格读取通用函数
' 功能:不打开工作簿读取指定单元格的值,读取失败返回空值 Function GetClosedCellValue(wbPath As String, wbName As String, wsName As String, cellRef As String) As String On Error Resume Next ' 规避文件不存在、工作表不存在等异常 Dim argStr As String argStr = "'" & wbPath & "[" & wbName & "]" & wsName & "'!" & Range(cellRef).Address(True, True, -4150) GetClosedCellValue = ExecuteExcel4Macro(argStr) If Err.Number <> 0 Then GetClosedCellValue = "" On Error GoTo 0 End Function
第二步:整合校验逻辑到文件遍历循环
Sub FilterValidExcelFiles() Dim targetFolder As String, FilesInPath As String Dim MyFiles() As String, Fnum As Long ' 以下参数请根据你的实际需求修改 targetFolder = "C:\Users\my.name\Desktop\" ' 目标文件夹路径,结尾要带反斜杠 Const CHECK_WS As String = "ACL" ' 要校验的工作表名称 Const CHECK_CELL As String = "C3" ' 要校验的单元格位置 Const EXPECTED_VALUE As String = "你的模板标识" ' 符合要求的单元格值 ' 初始化文件夹遍历 If Right(targetFolder, 1) <> "\" Then targetFolder = targetFolder & "\" FilesInPath = Dir(targetFolder & "*.xls*") ' 仅筛选Excel格式文件 Fnum = 0 Do While FilesInPath <> "" ' 先校验目标单元格值 Dim cellVal As String cellVal = GetClosedCellValue(targetFolder, FilesInPath, CHECK_WS, CHECK_CELL) ' 符合条件才存入数组 If cellVal = EXPECTED_VALUE Then Fnum = Fnum + 1 ReDim Preserve MyFiles(1 To Fnum) MyFiles(Fnum) = FilesInPath End If FilesInPath = Dir() Loop ' 后续你可以直接用MyFiles数组处理符合要求的文件 If Fnum > 0 Then MsgBox "共筛选到" & Fnum & "个符合要求的文件" Else MsgBox "未找到符合要求的文件" End If End Sub
注意事项
- ExecuteExcel4Macro不支持xlsb格式的文件,也无法读取带密码加密的工作簿
- 如果你的模板标识存储位置、判定规则有变化,修改第二步里的常量参数即可
- 若需要同时校验多个单元格,只需在判断条件里增加对应的读取和校验逻辑即可
内容的提问来源于stack exchange,提问作者IKindaNeedAHand
相关产品推荐
相关产品推荐

