2012-07-02 3 views
4

В Excel можно найти формулы, содержащие ссылки на пустые ячейки.Проверка ошибок и отслеживание пустых ячеек

Например

А1 = 1

В1 = Пустой

С1 = 0,5

D1 = А1 + В1 + С1

D1 будет правильно рассчитать значение будет 1,5 Однако проверка ошибок определит, что в формуле D1 есть ошибка, и она может нарисовать стрелку для этой ячейки.

Мне нужно предупредить пользователя, если у них есть ссылка на пустую ячейку.

Когда я пытаюсь записать себя с помощью функции я получаю это

With Application.ErrorCheckingOptions 
    .EvaluateToError = False 
    .TextDate = False 
    .NumberAsText = False 
    .InconsistentFormula = False 
    .OmittedCells = False 
    .UnlockedFormulaCells = False 
    .ListDataValidation = False 
    .InconsistentTableFormula = False 
End With 

ActiveSheet.ClearArrows 

Варианты для проверки только для пустых ячеек настроены правильно, но фактическое выполнение функции «Трассировка» полностью игнорируется. Есть ли способ вызвать это автоматически, а затем проверить результат теста?

Функция «Формула Tab» «Проверка ошибок» «Формулы со ссылкой на пустые ячейки» «Трассировка Пустой клетки»

+0

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

+0

+ 1 Хороший вопрос :) –

ответ

1

Вот метод VBA для проверки формул со ссылкой на пустые ячейки. Это не только скажет вам, какая именно формула, но и какая ячейка пуста.

Чтобы проверить это, в листа1 Ячейка A1 поставить эту формулу

=F1+G1+H1 

Keep H1 опорожнить и заполнить F1 и G1

В ячейке A5, поместите эту формулу

=A1*D5 

Keep ячейка D5 пуста.

Теперь вставьте этот код в модуль.

Option Explicit 

Sub Sample() 
    Dim ws As Worksheet 
    Dim RngFormulas As Range, fCell As Range, _ 
    DPrcd As Range, aCell As Range 

    Set ws = Sheets("Sheet1") 

    With ws 
     On Error Resume Next 
     Set RngFormulas = .Cells.SpecialCells(xlCellTypeFormulas) 
     On Error GoTo 0 

     If Not RngFormulas Is Nothing Then 
      For Each fCell In RngFormulas 
       On Error Resume Next 
       Set DPrcd = fCell.DirectPrecedents 
       On Error GoTo 0 
       If Not DPrcd Is Nothing Then 
        For Each aCell In DPrcd 
         If IsEmpty(aCell.Value) Then 
          Debug.Print aCell.Address & " in " & _ 
          fCell.Formula & " is empty" 
         End If 
        Next 
       End If 
      Next 
     End If 
    End With 
End Sub 

При запуске макроса вы увидите вывод в непосредственном окне.

СНАПШОТ

enter image description here

0

попробовать = IF (COUNTA (A1: A3), "хорошо", "ошибка"), чтобы найти пробелы в массиве, и если это проходит, то вам может делать все, что еще нужно сделать.

0

Я хотел запустить Формулы> Проверка ошибок на каждой странице моей большой электронной таблицы, но я также не смог найти код VBA для ее выполнения.

Лучшее, что я придумал, состояло в том, чтобы просто выбрать ошибки, используя Goto> Special, для которого требуется обработка ошибок, чтобы игнорировать ошибку, возникающую, когда ошибок не обнаружено (и это не работает для # N/A констант).

Dim r As Range 

On Error Resume Next 
Set r = ActiveCell.SpecialCells(xlCellTypeFormulas, xlErrors) 
If Err.Number <> 0 And Err.Number <> 1004 Then Stop 
On Error GoTo 0 
If Not r Is Nothing Then 
    If r.Count > 0 Then 
     r.Select 
    End If 
End If 

Если ошибка, отличная от 1004, «Ячейки не найдены». происходит, я не обслуживал его больше, чем разрывать макрос.

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