如果#REF!找到然后错误框宏

时间:2013-09-26 09:42:33

标签: excel vba find msgbox

我正在尝试完成一个寻找'#REF!'的简单宏。在工作表中由于用户改变行并破坏基础公式。

我已经找到了:

Sheets("Location_Multiple").Select
Range("A1:AL10000").Select

Selection.Find(What:="#REF!", After:=ActiveCell, LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False).Activate

根据我的理解,我需要输入一个If参数为true,然后

MsgBox"Please go back and check...."

我只是不确定应该遵循if ....

非常感谢任何指针。

3 个答案:

答案 0 :(得分:5)

尝试以下代码

Sub DisplayError()

On Error Resume Next
Dim rng As Range
Set rng = Sheets("Location_Multiple").Range("A1:AL10000")

Dim rngError As Range
Set rngError = rng.SpecialCells(xlCellTypeFormulas, xlErrors)

If Not rngError Is Nothing Then
    For Each cell In rngError
        MsgBox "Please go back and check.... " & cell.Address
    Next
End If
End Sub

答案 1 :(得分:1)

使用此功能,将LookIn参数更改为xlValues而不是xlFormulas

Selection.Find(What:="#REF!", After:=ActiveCell, LookIn:=xlValues, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False).Activate

为了更清洁的实施:

Dim sht as Worksheet
Dim rngSrch as Range
Dim rngErr as Range

Set sht = Sheets("Location_Multiple")
Set rngSrch = sht.Range("A1:AL10000")

Set rngErr = rngSearch.Find(What:="#REF!", After:=ActiveCell, LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False)

If Not rngErr Is Nothing Then
    'Do something to the offending cell, like, highlight it:
    rngErr.Interior.ColorIndex = 39
End If

预计可能有多个单元格出现此类错误,您可能需要在.Find循环内实施Do...While。在SO上有几个这类问题的例子。如果你在实现循环时遇到问题,请告诉我。

答案 2 :(得分:0)

你遇到的问题是因为你正在搜索一个字符串 - 而#REF是一个错误。

您可以使用IsError函数为具有错误的单元格返回true。将其与循环相结合,您就可以实现所需。我没有测试过这个,但是你得到了这个小说:

Set rng = Sheets("Location_Multiple").Range("A1:AL10000")
For Each cell In rngError
    If IsError(cell) == true
    MsgBox "Please go back and check.... " & cell.Address
    Endif
Next