如何统计Excel VBA代码执行过程中产生的错误次数?
问题根因
- 变量命名拼写不统一:你定义的
folder/format/errors变量,实际代码中用了西班牙语拼写的CARPETA/FORMATO/errores,变量不匹配导致逻辑失效 - 没有文件存在校验和错误捕获逻辑:原代码直接调用
FollowHyperlink打开文件,错误计数是每轮循环都加1,和打开成功/失败状态完全不绑定,自然无法统计失败次数
修正后可实现失败统计的代码
Sub Busqueda_MSDS() Windows("Excel1.xlsm").Activate Sheets("Sheet2").Visible = True Dim folder As String Dim fullPath As String Dim format As String Dim errors As Integer Dim i As Integer i = 2 ' 统一变量命名,避免拼写混乱 folder = "C:\Users\documents\pdfs\" format = ".pdf" errors = 0 ' 初始化错误计数为0 Do While ThisWorkbook.Sheets("Sheet2").Range("G" & i) <> "" fullPath = folder & ThisWorkbook.Sheets("Sheet2").Range("G" & i).Value & format ' 第一步:先判断文件是否存在 If Dir(fullPath) = "" Then ' 文件不存在,错误计数+1 errors = errors + 1 Else ' 第二步:文件存在的情况下尝试打开,加错误捕获处理打开失败的情况 On Error Resume Next ActiveWorkbook.FollowHyperlink fullPath If Err.Number <> 0 Then ' 打开失败(比如文件损坏、无权限),错误计数+1 errors = errors + 1 Err.Clear End If On Error GoTo 0 End If i = i + 1 Loop ' 统计完成后弹窗提示失败次数,你也可以根据需要把值写入指定单元格 MsgBox "共查找失败 " & errors & " 个PDF文件" End Sub
逻辑说明
- 每次循环先拼接完整的PDF文件路径,调用
Dir函数校验文件是否真实存在,不存在直接计入失败 - 对存在的文件添加错误捕获机制,覆盖文件损坏、权限不足等无法打开的场景,出现异常也计入失败
- 循环结束后弹窗返回总失败次数,你可以根据需要修改为把次数写入指定单元格、输出到日志等其他处理逻辑
内容的提问来源于stack exchange,提问作者SANTIAGO PARRA MARTINEZ
相关产品推荐
相关产品推荐

