Хобрук: Ваш путь к мастерству в программировании

Управление типичными ошибками формул Excel в функциях vba

Я пишу некоторые функции vba. В частности, я переписываю VLOOKUP... В этом MY_VLOOKUP у меня есть две логические переменные: 1. error_range, это правда, если диапазон, переданный в аргументах формулы, недействителен 2. not_ava, это правда, если нет результата ( результатом ВПР будет #Н/Д)

В разделе обработчика ошибок я написал

Errorhandler:
If error_range Then error_cat = xlErrRef
If not_ava Then error_cat = xlErrNA
Err.Raise error_cat 

но я получаю ошибку "#ЗНАЧ" в ячейке. При отладке я понял, что err.raise не работает и генерирует эту ошибку «#VALUE». Как я могу получить ошибку «#N/D» или «#REF» в ячейке?

25.05.2015

Ответы:


1

Вы можете получить много ошибок при использовании формул Excel. Это могут быть #Ref, #Value, #N/A, #Name и т. д.

Я обычно использую CVERR() для перехвата таких ошибок. Вот пример.

Sub Sample()
    Dim Ret As Variant
    Dim error_cat As Long

    On Error GoTo Whoa

    Ret = Application.Evaluate("=VLOOKUP(12,SiddharthRout,1,0)") '<~~ Invalid Range
    'Ret = Application.Evaluate("=VLOOKUP(12,D3:G7,1,0)")   '<~~ No Value found

    Select Case CVErr(Ret)
        Case CVErr(xlErrName): error_cat = xlErrName
        Case CVErr(xlErrNA): error_cat = xlErrNA
        Case CVErr(xlErrRef): error_cat = xlErrRef
        Case CVErr(xlErrValue): error_cat = xlErrValue
    End Select

    If error_cat <> 0 Then Err.Raise error_cat

LetsContinue:
    MsgBox "Phew!"
    Exit Sub
Whoa:
    MsgBox "Error Error Damn Error"
    Resume LetsContinue
End Sub
25.05.2015
  • спасибо! ваши решения указали мне правильный путь. я не знал об использовании CVERr Я решил свою проблему с помощью этого кода в разделе обработки ошибок: 25.05.2015
  • Рад помочь :) 25.05.2015

  • 2

    Вставляю код, может кому пригодится

    (спасибо Сиддхарту Рауту за помощь)

    If error_range Then 
    error_cat = xlErrRef 
    Else
    If not_ava Then 
    error_cat = xlErrNA 
    else 
    error_cat = xlErrValue 
    End If 
    end if
    my_vlookup = CVErr(error_cat ) 
    
    25.05.2015
    Новые материалы

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

    Как построить любой стол
    Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..