重点内容
适用版本
桌面版通用(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却没意识到所有类型的错误都会被吃掉,连真正该注意的问题也一起被忽略了 - 忘记在正常流程结尾加
Exit Sub,导致没出错时也会跑进错误处理区块 - 错误处理区块最后忘了
Resume Next,处理完一个错误后无法回到循环继续处理下一个
Sources
Blog / Website: