MICROSOFT

EP03. “Err Object Err 对象”

首页 Microsoft 工具 Excel · VBA · Macro Errors · EP03
约 4 分钟· #EP03#Excel#Macro Errors
🔒 登录后可标记已读
  • EP02 的错误提示只能说「哪个单元格出错」,说不出「错在哪里」——Err 对象能把这块补上
  • VBA 出错的瞬间会自动帮你填好 Err.Number(错误代号)和 Err.Description(错误说明),直接拿来用
  • 搭配 Select Case 判断代号,就能针对负数、文字这些不同情况给出不同提示,不用只会说一句「出错了」
  • 前置知识:EP02 的 On Error GoTo 用法

重点内容


适用版本

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


用 Err.Number / Err.Description 显示详细信息

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 Err.Number & " " & Err.Description & " at cell " & cell.Address

Resume Next

出错时会显示错误代号、错误说明文字、以及是哪个单元格出错,比单纯写死一句提示更精确。


用 Select Case 针对不同错误代号给不同提示

InvalidValue:

Select Case Err.Number
    Case Is = 5
        MsgBox "Can't calculate square root of negative number at cell " & cell.Address
    Case Is = 13
        MsgBox "Can't calculate square root of text at cell " & cell.Address
End Select

Resume Next

错误代号 5(Invalid procedure call)代表负数开根号,13(Type mismatch)代表文字开根号,针对不同情况给出更友善的提示文字。


学完你会

  • ✅ 用 Err.NumberErr.Description 显示更详细的错误信息
  • ✅ 用 Select Case 针对不同错误代号,给出更精确的提示文字
  • ✅ 记得 Err 对象的内容只在错误发生当下有效,要用就趁早用

常见错误

  • 只用一句固定的错误提示,不管什么错误都显示同一句话,使用者不知道具体问题出在哪
  • 用 Select Case 判断错误代号时,代号写错或漏了某个常见错误类型,导致提示信息不准确
  • 忘记 Err 对象的内容只在错误发生「当下」有效,之后的代码如果又执行了别的操作,Err 的内容可能已经被覆盖

Sources

Blog / Website:

  1. Err Object