You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VBA直接从文件夹读取文件(不使用对话框)时出现‘Object Variable or With Block not Set’错误的原因排查求助

问题拆解与修复方案

嘿,我帮你理清楚为啥直接读文件夹会报错,而用文件对话框就正常——核心是两个关键错误:

1. Dir返回的是文件名,不是完整路径

你用Dir(MyFolder & "\FinalPrice*.xlsm")拿到的只是纯文件名(比如FinalPrice_Sep.xlsm),但Workbooks.Open()需要完整的文件路径才能精准找到文件。如果Excel当前的默认保存路径不是你指定的MyFolder,它就会在错误的地方找文件:要么找不到直接弹出错误,要么找到其他地方的同名文件,而那个文件里根本没有Adekwatnosc工作表,最终触发你看到的调试报错。

反观文件对话框的selectFilePK函数,它返回的是完整的文件路径(比如C:\Users\V1410191\Documents\FinalSeptember\FinalPrice_Sep.xlsm),所以Workbooks.Open()能准确找到目标文件,自然不会出问题。

2. 循环逻辑搞反了,跳过第一个文件还可能处理空值

你的循环顺序有bug:

  • 第一步MyFile = Dir(...)已经拿到了第一个文件的名字
  • 但进入循环后第一行就执行MyFile = Dir,直接跳到下一个文件(如果没有下一个,MyFile就变成空字符串)
  • 然后你尝试打开这个MyFile——这会导致第一个文件完全被跳过,如果文件夹里只有一个文件,MyFile会变成空,Workbooks.Open("")直接报错。

修正后的完整代码

ThisMonth = Format(Date, "mmmm")
MyFolder = "C:\Users\V1410191\Documents\Final" & ThisMonth
MyFile = Dir(MyFolder & "\FinalPrice*.xlsm")

Do Until MyFile = ""
    ' 关键:拼接完整文件路径
    Dim fullFilePath As String
    fullFilePath = MyFolder & "\" & MyFile
    
    ' 打开文件,关闭链接更新提示
    Set data_wb = Workbooks.Open(fullFilePath, UpdateLinks:=0)
    
    ' 尽量别用Select,直接操作对象更稳定(替换成你的实际操作)
    data_wb.Sheets("Adekwatnosc").Rows("1:1").Copy
    
    ' 关闭文件,不保存修改(避免误改源文件)
    data_wb.Close SaveChanges:=False
    
    ' 最后再获取下一个文件
    MyFile = Dir
Loop

额外优化小技巧

  • 别用Select/Activate:VBA里直接操作单元格/工作表对象比先选中再操作更稳定,也不会打乱用户的操作界面。
  • 加个错误判断:防止遇到没有Adekwatnosc工作表的文件,比如:
    On Error Resume Next
    Dim targetSheet As Worksheet
    Set targetSheet = data_wb.Sheets("Adekwatnosc")
    On Error GoTo 0
    
    If Not targetSheet Is Nothing Then
        targetSheet.Rows("1:1").Copy ' 你的操作
    Else
        MsgBox "文件 " & fullFilePath & " 里找不到Adekwatnosc工作表哦!"
    End If
    
  • 关闭屏幕更新:如果文件多,加上Application.ScreenUpdating = False开头,Application.ScreenUpdating = True结尾,能让代码跑更快。

内容的提问来源于stack exchange,提问作者Przemek Dabek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 15:57:41