VBA中Exit For循环未生效,无法获取SharePoint/OneDrive文件夹最新Excel文件
问题原因
- 未在每次循环开始时清空
Err对象状态:On Error Resume Next触发的错误会一直保留在Err对象中,不会随循环迭代自动重置,就算后续某次打开文件成功,Err仍可能保留之前的非0值,导致判断逻辑失效,无法触发Exit For,循环会一直执行到底,打开所有符合命名规则的文件。 Now()返回值携带时分秒信息,虽然格式化文件名时不受影响,但使用Date()代替可以避免潜在的日期判断误差。
修正后的代码
Sub Latest_file_in_range() Dim x As Date Dim wb As Workbook Application.DisplayAlerts = False Application.ScreenUpdating = False ' 从当前日期倒推15天遍历,用Date()仅取日期部分 For x = Date To DateAdd("d", -15, Date) Step -1 Err.Clear ' 每次循环前清空错误状态,核心修复点 On Error Resume Next ' 尝试打开文件,用变量接收工作簿对象方便后续处理 Set wb = Workbooks.Open(Filename:="https://***-my.sharepoint.com/***/" & Format(x, "dd.mm.yyyy") & ".xlsx", UpdateLinks:=xlUpdateLinksNever) On Error GoTo 0 ' 恢复默认错误捕获,避免后续异常被忽略 If Not wb Is Nothing Then ' 判断文件是否打开成功,比直接判断Err更可靠 MsgBox Format(x, "dd.mm.yyyy") ' 如果不需要保留打开的文件,可取消注释下方代码自动关闭 ' wb.Close SaveChanges:=False Exit For End If Set wb = Nothing ' 重置工作簿变量 Next Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub
优化建议
如果仅需要判断文件是否存在、不需要读取文件内容,可以改用Dir函数或者FileSystemObject做存在性判断,避免频繁打开文件带来的性能损耗。如果对应SharePoint文件夹已经同步到本地OneDrive目录,直接使用本地路径做判断效率会更高。
内容的提问来源于stack exchange,提问作者navafolk
相关产品推荐
相关产品推荐

