2015-10-23 13 views
1

Я получаю ошибку несоответствия типа для строки If first_unit = "N/A" Then. Я пытаюсь изменить текст выпадающего меню (B26: C26) в зависимости от выбора в другом выпадающем меню (B10). Для следующего кода:"Ошибка несоответствия типа" с помощью VLookup

Dim check_change As Boolean 
Private Sub Worksheet_Change(ByVal Target As Range) 
On Error GoTo 0 


If check_change = False Then 

If Target.Address = Range("B10").Address Then 
    Dim first_unit As Variant 
    Dim second_unit As Variant 
    Dim third_unit As Variant 

    check_change = True 
    first_unit = Application.WorksheetFunction.VLookup(Range("B10:E10"), Sheet3.Range("Jurisdictions_table"), 5, False) 
    second_unit = Application.WorksheetFunction.VLookup(Range("B10:E10"), Sheet3.Range("Jurisdictions_table"), 6, False) 
    third_unit = Application.WorksheetFunction.VLookup(Range("B10:E10"), Sheet3.Range("Jurisdictions_table"), 7, False) 

    Range("D5").Value = first_unit 
    Range("E5").Value = second_unit 
    Range("F5").Value = third_unit 

    If first_unit = "N/A" Then 
     Range("B26:C26").Value = "Certified" 
    End If 

    check_change = False 
    Exit Sub 
End If 

If Not Intersect(Target, Range("B19")) Is Nothing Then 
    check_change = True 
    Call ft_to_m(Range("D19"), Range("B19")) 
    check_change = False 
    Exit Sub 
End If 

If Not Intersect(Target, Range("D19")) Is Nothing Then 
    check_change = True 
    Call m_to_ft(Range("D19"), Range("B19")) 
    check_change = False 
    Exit Sub 
End If 

End If 

End Sub 
+0

** N/A ** или ** # N/A ** ??? –

+0

См. Http://stackoverflow.com/questions/17177709/why-doesnt-iserror-work-with-a-vlookup-statement-in-excel-vba; обратите внимание на разницу между 'Application.WorksheetFunction.VLookup()' и 'Application.VLookup()' –

ответ

0

Первый аргумент в ВПР является значение поиска, не Диапазон, я думаю, что это «B10» не Range («B10: E10»)

Вы должны использовать Обработка ошибок для ВПР "Включить обработку ошибок с помощью„On Error Resume Next“, а не на ошибки Goto 0

Sub test1() 
On Error Resume Next 

    first_unit = Application.WorksheetFunction.VLookup(Range("B10").value, Sheet3.Range("Jurisdictions_table"), 5, False) 
     'first_unit = Application.WorksheetFunction.VLookup(Range("B10:E10"), Sheet3.Range("Jurisdictions_table"), 5, False) 

    If IsError(first_unit) = False Then 
    ' Example 
    first_unit = "N/A" 

    Else 

    first_unit = "Otherwise" 

    End If 

End Sub 
+0

Ваши объяснения не ясны. Первый аргумент - это значение поиска, а не диапазон. Excel преобразует ячейку в значение в функции. Поэтому, чтобы быть понятным, вы должны использовать 'Range (« B10 »). Значение' как первый аргумент. И вы правы, вы не можете использовать для этого диапазон нескольких ячеек. –

+0

@D_bester Почему вы голосуете за мой ответ? даже после того, как я предоставил надлежащий обзор вашего кода? – newjenn

+0

Редактирование улучшает ваш ответ. –

0

Использование Application.VLookup вместо Application.WorksheetFunction.VLookup() так, что она не вызовет ошибку, если поиск неудачен. Затем вы можете проверить IsError(), чтобы определить, есть ли у вас действительный результат или ошибка. В Excel он показывает # N/A ошибку, если значение не найдено в таблице поиска. Использование IsError() приведет к ошибке.

Также первый аргумент - это значение поиска, а не диапазон. Excel преобразует ячейку в значение в функции. Поэтому, чтобы быть понятным, вы должны использовать Range("B10").Value в качестве первого аргумента. И вы не можете использовать для этого диапазон нескольких ячеек.

first_unit = Application.VLookup(Range("B10").Value, Sheet3.Range("Jurisdictions_table"), 5, False) 
second_unit = Application.VLookup(Range("C10").Value, Sheet3.Range("Jurisdictions_table"), 6, False) 
third_unit = Application.VLookup(Range("D10").Value, Sheet3.Range("Jurisdictions_table"), 7, False) 

If Not IsError(first_unit) Then Range("D5").Value = first_unit 
If Not IsError(second_unit) Then Range("E5").Value = second_unit 
If Not IsError(third_unit) Then Range("F5").Value = third_unit 

If IsError(first_unit) Then 
    Range("B26:C26").Value = "Certified" 
End If 

CPearson: Error Handling With Worksheet Functions

+0

Если этот ответ поможет вам принять его, установив галочку слева. Если это не сработает, сообщите мне. –

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

  • Нет связанных вопросов^_^