EP02. “Error Handling 错误处理”
🔒 登录后可标记已读- 一批数据里只要有一格是负数或文字,
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: