我正在尝试完成一个寻找'#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 ....
非常感谢任何指针。
答案 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