2016-10-20 15 views
0

Это образец части таблицы, что я работаю с: enter image description hereVBA Обработка ошибки Проблемы с пустыми ячейками

Этой таблица генерируется из другого кода VBA. Я написал простой скрипт, чтобы очистить условия #VALUE из таблицы после его создания.

'Clean any value errors before charting 

    With Worksheets("CG Raw Data") 

    On Error Resume Next 

    Range("A2:W2").End(xlDown).SpecialCells(xlCellTypeFormulas, xlErrors).ClearContents 

    On Error GoTo 0 

    End With 

End Sub 

Теперь таблица выглядит следующим образом:

enter image description here

По какой-то причине этот код очищает весь столбец, если он имеет какие-либо пробелы, а не только ошибки #value. Я хочу, чтобы он просто удалял ошибки #VALUE и сохранял все остальные ячейки. Насколько я могу судить, код должен делать это. Какая ошибка?

+2

Не было бы проще просто обернуть формулы с помощью '= IFERROR()'? – Comintern

+0

yup, что бы сработало - мне было в основном просто любопытно, почему код очищал все столбцы пробелами и как избежать этого для будущих ссылок. – beeba

+0

Вместо этого вы можете использовать функцию VBA 'IsError'. Вы пройдете через все ячейки (с «Для каждой ячейки в Range (« A2: W2 »). End (xlDown) --- Следующая ячейка») и проверьте «If IsError (cell) Then --- End If'. Это не должно ничего делать для пустых ячеек. –

ответ

3

Моя первая рекомендация будет обернуть формулы с =IFERROR(,"").

В качестве альтернативы, что-то, как это должно работать:

DIM rngCell as Range 

For Each rngCell In Worksheets(1).Range("A1:W" & Range("A1").End(xlDown).Row) 
    If IsError(rngCell) Then 
     rngCell.Clear 
    End If 
Next rngCell 

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

У меня нет ответа, чтобы оставить комментарий.

0

Выпуск № 1 - вы Withing конкретный рабочий лист, но не квалифицируя Range()
Выпуск № 2 - Расчистите другие ошибки, чем #VALUE

Как насчет:

Sub NoValue() 
    Dim r As Range, N As Long 

    With Worksheets("CG Raw Data") 
     N = .Cells(Rows.Count, "W").End(xlUp).Row 
     For Each r In .Range("A2:W" & N) 
      If r.Text = "#VALUE!" Then r.ClearContents 
     Next r 
    End With 
End Sub 
Смежные вопросы