2013-09-26 2 views
2

Я пытаюсь завершить простой макрос, который ищет '#REF!' на листе из-за изменения пользователем строки и разрушения базовых формул.Если #REF! после этого появляется ошибка Box Macro

я дошел до находки:

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 

Из того, что я понимаю, что нужно ввести параметр, если это правда, то

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

Я просто не уверен, что должно следовать, если ....

Любые указатели были бы очень признательны.

+0

см. [Это] (http://vba4all.wordpress.com/category/vba-macros/highlight-cells-based-on-a-condition/) для начала работы. В 'If InStr (1, cell, searchTerm, vbTextCompare) Затем' вам нужно изменить 'cell' на' cell.text', и он должен работать –

ответ

4

Try ниже код

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 большое использование метода SpecialCells. –

+0

Идеальный..работал удовольствие, извините, что задал еще один вопрос, все еще являющийся новичком VBA, что такое клас, чтобы показать коробку, если нет ошибки? – Methexis

+1

Не беспокойтесь, его нет ;-) Else: MsgBox «Все это хорошо» – Methexis

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 
+2

'isError' также возвращает' TRUE' для других типов ошибок – sam092

+0

True. Я не хотел делать все домашние задания. Обработка исключений также была бы еще одним возможным вариантом. Зависит от того, сколько работы OP хочет вставить. –

+2

использовать только один '=' в VBA :) –

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. Если у вас возникнут проблемы с реализацией цикла, дайте мне знать.

Смежные вопросы