资讯动态

Excel VBA 入门到精通(九):错误处理与调试

发布时间:2026/8/10 20:53:27 来源:尧图企业网站定制
🎯本章目标:掌握 VBA 错误处理机制,学会使用调试工具定位问题,编写健壮、可靠的代码。一、错误类型1.1 VBA 中的三种错误┌─────────────────────────────────────────────┐ │ VBA 错误类型 │ ├─────────────────────────────────────────────┤ │ │ │ ┌─────────────────────────────────────┐ │ │ │ 语法错误 (Syntax Error) │ │ │ │ 代码不符合语法规则 │ │ │ │ 编译时发现,显示红色波浪线 │ │ │ │ 示例:If x = 5 Then (缺少 End If) │ │ │ └─────────────────────────────────────┘ │ │ │ │ ┌─────────────────────────────────────┐ │ │ │ 编译错误 (Compile Error) │ │ │ │ 代码结构问题 │ │ │ │ 运行前发现 │ │ │ │ 示例:变量未定义、过程名重复 │ │ │ └─────────────────────────────────────┘ │ │ │ │ ┌─────────────────────────────────────┐ │ │ │ 运行时错误 (Runtime Error) │ │ │ │ 运行过程中发生 │ │ │ │ 最需要关注和处理的错误类型 │ │ │ │ 示例:除以零、文件不存在、下标越界 │ │ │ └─────────────────────────────────────┘ │ │ │ │ ┌─────────────────────────────────────┐ │ │ │ 逻辑错误 (Logic Error) │ │ │ │ 代码能运行,但结果不正确 │ │ │ │ 最难发现,需要仔细调试 │ │ │ │ 示例:循环条件错误、公式写错 │ │ │ └─────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────┘1.2 常见运行时错误错误号说明常见原因9下标越界数组索引超出范围11除以零除数为 013类型不匹配数据类型转换失败53文件未找到文件路径错误1004应用程序定义错误Excel 操作失败二、On Error 语句2.1 On Error GoTo 标签Sub OnErrorGoToDemo() On Error GoTo ErrorHandler ' 可能出错的代码 Dim x As Integer Dim y As Integer Dim result As Integer x = 10 y = 0 result = x / y ' 这里会出错(除以零) MsgBox "计算结果: " result Exit Sub ' 正常退出,跳过错误处理代码 ErrorHandler: MsgBox "发生错误!" vbCrLf _ "错误号: " Err.Number vbCrLf _ "错误描述: " Err.Description, vbCritical End Sub2.2 On Error Resume Next跳过错误,继续执行下一行:Sub OnErrorResumeNextDemo() On Error Resume Next ' 尝试删除可能不存在的工作表 Application.DisplayAlerts = False ThisWorkbook.Worksheets("临时表").Delete Application.DisplayAlerts = True ' 检查是否出错 If Err.Number 0 Then Debug.Print "工作表不存在,已跳过" Err.Clear ' 清除错误 End If ' 继续执行其他代码 Debug.Print "继续执行..." End Sub2.3 On Error GoTo 0关闭错误处理:Sub OnErrorGoToZero() On Error Resume Next ' 第一段代码:忽略错误 Dim x As Integer x = 1 / 0 Debug.Print "错误被忽略" ' 关闭错误处理 On Error GoTo 0 ' 第二段代码:错误会导致程序中断 ' x = 1 / 0 ' 这行会弹出错误对话框 End Sub2.4 错误处理最佳实践Sub BestPracticeErrorHandling() On Error GoTo ErrorHandler ' ===== 主要代码区域 ===== Dim ws As Worksheet Dim lastRow As Long Dim i As Long ' 检查工作表是否存在 Set ws = ThisWorkbook.Worksheets("数据") ' 获取最后一行 lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row '

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价