如何在VBA中检查Excel单元格是否包含REF!错误

7

我在许多讨论中找到了如何在Excel中实现此目标的方案,但我的目的是在VBA中捕获REF!错误,而不是在Excel本身中。这是否可能?


它将包含一个错误值。例如,activecell.Value = #N/A 的2042错误。 - Nathan_Sav
2个回答

7
If IsError(cell.Value) Then
    If cell.Value = CVErr(xlErrName) Then
        ...
    End If
End If

原始代码有误,如果单元格不包含错误,则会出现类型不匹配错误。
If cell.Value = CVErr(xlErrRef) Then
    ...
End If


1
如果cell为空,会发生什么? - MikeD
1
@MikeD 我不知道为什么三年前我没有回复你(可能错过了通知),但你是正确的,它会在空单元格上爆炸,也会在任何非错误内容的单元格上爆炸。 - GSerg

2
Sub CheckRef()
Dim CheckRange As Range, CheckCell As Range

    Set CheckRange = [A1:D10]                ' as per app

    For Each CheckCell In CheckRange
    If IsError(CheckCell) And _
       CVErr(CheckCell) = CVErr(2023) Then ' 2023 --> xlErrRef
            MsgBox ("#REF! in  " & CheckCell.AddressLocal)
            Exit Sub                     ' exit after first #REF! found
        End If
    Next CheckCell
End Sub

例子

  • 在B2中输入“=1/0”以创建与“#REF!”不同的错误
  • 在B4、B5中输入1
  • 在B7中输入“=B4+B5”
  • 删除第4行
  • 运行Sub CheckRef()

enter image description here


2
如果 CheckCell 包含数字 2023,会发生什么? - GSerg
1
啊...聪明的问题...感谢指出...在这种情况下,我们检测到了一个错误的阳性...因此我们必须添加一个检查IsError(CheckCell)...更改答案。 - MikeD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接