MICROSOFT

EP02. “Error Handling 错误处理”

首页 Microsoft 工具 Excel · VBA · Macro Errors · EP02
约 4 分钟· #EP02#Excel#Macro Errors
🔒 登录后可标记已读
  • 一批数据里只要有一格是负数或文字,Sqr() 算到那格就报错,整个宏当场卡死——错误处理要解决的正是这个
  • On Error Resume Next:遇到错误直接跳过,不吭一声继续跑下一笔
  • On Error GoTo:跳到指定位置处理,弹窗告诉使用者是哪个单元格出的问题
  • 前置知识:基本的 For Each 循环
  • 学完能让宏遇到「部分数据有问题」时不整个中断,稳稳跑完剩下的

重点内容


适用版本

桌面版通用(Excel 365 / 2021 / 2019 等)。


方法一:忽略错误(On Error Resume Next)

Dim rng As Range, cell As Range
Set rng = Selection
For Each cell In rng
  On Error Resume Next
  cell.Value = Sqr(cell.Value)
Next cell

遇到无法开根号的值(负数、文字)会直接跳过,不显示任何提示,静静往下继续跑。

📌 这个写法要小心使用——因为它会把所有错误都吃掉,包括你没预期到的错误,可能导致问题被隐藏而不自知。


方法二:导向错误处理区块(On Error GoTo)

Dim rng As Range, cell As Range
Set rng = Selection
For Each cell In rng
  On Error GoTo InvalidValue:
  cell.Value = Sqr(cell.Value)
Next cell
Exit Sub
InvalidValue:
  MsgBox "can't calculate square root at cell " & cell.Address
  Resume Next

遇到错误时,会跳到 InvalidValue: 这个标签处理——弹出消息框告诉使用者哪个单元格出错,再用 Resume Next 回到循环继续跑下一格。


方法怎么选

方法适合场景备注
On Error Resume Next想直接跳过错误、不给提示,继续往下跑会把所有类型的错误都吃掉,包括没预期到的
On Error GoTo想在出错时告诉使用者哪里错了,再继续处理下一笔需要搭配 Exit Sub + 错误处理标签 + Resume Next

学完你会

  • ✅ 用 On Error Resume Next 让宏跳过错误继续跑
  • ✅ 用 On Error GoTo 把错误导向指定区块处理,并弹窗提示
  • ✅ 判断该用哪种错误处理方式,不会让整个宏因为一笔坏数据而中断

常见错误

  • 用了 On Error Resume Next 却没意识到所有类型的错误都会被吃掉,连真正该注意的问题也一起被忽略了
  • 忘记在正常流程结尾加 Exit Sub,导致没出错时也会跑进错误处理区块
  • 错误处理区块最后忘了 Resume Next,处理完一个错误后无法回到循环继续处理下一个

Sources

Blog / Website:

  1. Error Handling