Страницы: 1
RSS
Макрос спотыкается на #Н/Д
 
Был рабочий код макроса
Код
Sub Обновить_договора()
    lrow = Cells(Rows.Count, 4).End(xlUp).Row
    Range(Cells(2, 8, Cells(lrow, .FormulaR1C1 = "=LOOKUP(2,1/((Договора!R2C17:R10001C17=RC[23])*" & _
        "(Договора!R2C16:R10001C16=""Да"")),Договора!R2C1:R10001C1)"
    Range(Cells(2, 8, Cells(lrow, 8.Value = Range(Cells(2, 8, Cells(lrow, 8)).Value    
    MsgBox "Выполнено!"
End Sub
макрос обращается на соседнюю страницу "Договора" и заносит в текущую таблицу нужные данные. Если данных на соседней странице не нашлось (ячейка оказалась пустой), то макрос заносит в таблицу сообщение #Н/Д

внесли доработку - перед MsgBox добавили следующий код:
Код
   If Range(Cells(2, 8, Cells(lrow, 8.Value = "#Н/Д" Then
        MsgBox "#Н/Д найдено"
        Range(Cells(2, 1), Cells(lrow, 1)).Font.Color = RGB(255, 0, 0)
    End If

в итоге имеем ошибку - Type Mismatch (спотыкается на строке If)

Подскажите где у нас ошибка или как можно изменить макрос, чтобы обойти эту проблему?

 
Код
If IsNumeric(ячейка.Value) Then   
   
Если известен вид ошибки, то можно проверить значение, например, для #Н/Д:   
If ячейка.Value <> "#N/A"  Then   
   
Или так:   
If Not Application.WorksheetFunction.IsError(ячейка.Value) Then   
'IsError = ЕОШИБКА, IsNA = ЕНД
 
Проверка ошибок - IsError.
А вообще - устраняйте ошибки в формулах листа.
 
skais675, спасибо за подсказу, но это для меня сложно, я новичок в макросах. Если не обременит - исправьте мой код - мне нужно, чтобы макрос изменил цвет шрифта в строке, где стоит #Н/Д. Можно даже саму #Н/Д сделать красным цветом. За совет, в любом случае, спасибо - буду знать в какой области повысить знания.
 
Цитата
skais675 написал:
If ячейка.Value <> "#N/A"  Then
плохо, не сработает. Надо либо как Витя подсказал
Код
If IsError(ячейка.Value) Then
или проверять текст ячейки(что не так универсально)
Код
If ячейка.Text <> "#Н/Д"  Then
 
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
А еще я подсказал сделать правильно на листе :)
 
VIZ_VIZ хотите помощи, выложите файл.
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
If ячейка.Text
это отчасти помогло - ошибка исчезла. Но макрос не находит #Н/Д, хотя такие ячейки имеются - идет по ветке else. Добавлял вот такой код
Код
    If Range(Cells(2, 8, Cells(lrow, 8)).Text = "#Н/Д" Then
        MsgBox "#Н/Д найдено"
        Range(Cells(2, 8, Cells(lrow, 8)).Font.Color = RGB(255, 0, 0)
        Else
        MsgBox "отработал блок Else"
    End If
 

где еще может быть ошибка?

Изменено: VIZ_VIZ - 18.09.2019 14:30:20 (скобки после 8 съел редактор)
 
VIZ_VIZ то как Вы написали код, то Вы проверяете не ячейки а диапазон целиком. Это верно вообще? Да и то написан код с ошибками, странно как он работает у Вас, не хватает скобки после 8, либо этот редактор сьедает.
 
skais675,скобки съел редактор - исправил
выкладываю файл, но данных почти не осталось (много весит)
 
vikttur, спасибо, ваш совет обязательно использую, но попозже - требуется изучить теорию в этой области)
 
Проверить наличие ошибки на листе можно и так:
Код
If VarType(здесь проверяемая ячейка)=10 then

Скрытый текст
 
VIZ_VIZ макрос остался в другой книге. Файл можно и до 300кб
Изменено: skais675 - 18.09.2019 14:36:32
 
skais675, в файле две страницы, макрос доступен на странице Проплаты - кнопка справа наверху

Цитата
skais675 написал:  VIZ_VIZ  то как Вы написали код, то Вы проверяете не ячейки
Про проверку диапазона не в курсе - не хватает знаний. Но макрос изначально работает по всему диапазону сразу. Мой код не заработает? То есть нужно цикл делать?
 
VIZ_VIZ В Вашем случае целесообразно использовать УФ.
Изменено: skais675 - 18.09.2019 14:49:10
 
skais675, не знаю такой термин, могли бы пояснить о чем речь?
 
VIZ_VIZ Я выложил Ваш пример  с УФ (условное форматирование) в предыдущем сообщении .
Изменено: skais675 - 18.09.2019 14:50:26
Страницы: 1
Наверх