Форум по VBA и MS Office

VBA, Excel => VBA, макросы в Excel => Тема начата: Посетитель от 14 марта 2018, 20:14

Название: Excel VBA: Скрыть ошибку с помощью макроса
Отправлено: Посетитель от 14 марта 2018, 20:14
А можно ли с помощью макроса скрыть ошибку #ДЕЛ/0!
Ну чтобы эта надпись не отображалась в ячейке, если появилась такая ошибка.
Пример, к сожалению, не взял с собой. Просто мне нужно это сделать без функции =ЕСЛИОШИБКА в каждой ячейке.
Название: Re: Excel VBA: Скрыть ошибку с помощью макроса
Отправлено: Администратор от 14 марта 2018, 20:24
Формула в ячейке должна остаться? Или можно удалить формулу?
Если должна остаться, то остаётся только условное форматирование.
А макрос будет делать в пределах возможностей экселя, ничего нового с помощью макроса нельзя сделать.
Название: Re: Excel VBA: Скрыть ошибку с помощью макроса
Отправлено: Администратор от 14 марта 2018, 20:26
А почему вам не подходит функция "ЕСЛИОШИБКА"?
Название: Re: Excel VBA: Скрыть ошибку с помощью макроса
Отправлено: Посетитель от 14 марта 2018, 20:34
Потому что в большом количестве ячеек уникальные ссылки, просто так не скопируешь.
Название: Re: Excel VBA: Скрыть ошибку с помощью макроса
Отправлено: Посетитель от 14 марта 2018, 20:35
Собственно, не то, что не подходит. 500 раз писать вручную я замучаюсь. Формула должна остаться, да.
Название: Re: Excel VBA: Скрыть ошибку с помощью макроса
Отправлено: Администратор от 14 марта 2018, 20:48
С помощью макроса можно так подставить функцию "ЕСЛИОШИБКА".
Макрос работает с выделенными ячейками. Макрос смотрит, есть ли в ячейке формула, прежде чем вставить функцию "ЕСЛИОШИБКА", поэтому можете выделять и шапку таблицы.
Но целые столбцы нельзя выделять, т.к. макрос будет очень долго работать, т.к. на листе 1 млн. строк.
Если будете выделять с помощью клавиши Ctrl, то два раза одни и те же ячейки нельзя выделять.

Для формул массива такая функция не подойдёт.

И предполагается, что нужно вставить функцию "ЕСЛИОШИБКА" в начало формулы. Если надо вставить функцию "ЕСЛИОШИБКА" в середину формулы, то макрос неправильно отработает.

Макрос
Sub макрос()

    Dim cell As Range, calc As Long
   
    ' Отключение монитора, чтобы ускорить макрос.
    Application.ScreenUpdating = False
   
    ' Отключение пересчёта формул, чтобы ускорить макрос.
        ' Перед отключением запоминаем режим формул, чтобы потом его вернуть.
    calc = Application.Calculation
    Application.Calculation = xlCalculationManual
   
    ' Вставка в ячейки, в которых есть формулы, функции "ЕСЛИОШИБКА".
    For Each cell In Selection.Cells
        If cell.HasFormula Then
            cell.Value = "=IFERROR(" & Mid(cell.Formula, 2) & ","""")"
        End If
    Next cell

    ' Включение того, что отключили.
    Application.ScreenUpdating = True
    Application.Calculation = calc
   
    ' Сообщение.
    MsgBox "Готово.", vbInformation

End Sub
[свернуть]
Название: Re: Excel VBA: Скрыть ошибку с помощью макроса
Отправлено: Посетитель от 15 марта 2018, 19:42
Все получилось!
Большое спасибо!