2016-11-18 2 views
0

Ich versuche, eine Vlookup-Funktion zu verwenden, um nach einem Wert in mehreren Arbeitsblättern in einer separaten Arbeitsmappe zu suchen. Ich versuche, die iferror Funktion mit dem vlookup zu verwenden, aber ich formatiere es nicht richtig.iFehler-Funktion mit vlookup in VBA

Sub CommandButton1_Click() 

Dim item As String 
    item = 8 

Dim brange, rbrange, jrange, cdrange, cprange As range 
    Set brange = Workbooks("Library_Database.xlsx")_ 
       .Worksheets("BOOKS").range("A2:H51") 
    Set rbrange = Workbooks("Library_Database.xlsx")_ 
        .Worksheets("REFERENCE BOOKS").range("A2:H51") 
    Set jrange = Workbooks("Library_Database.xlsx")_ 
       .Worksheets("JOURNALS").range("A2:H51") 
    Set cdrange = Workbooks("Library_Database.xlsx")_ 
        .Worksheets("CDS").range("A2:H51") 
    Set cprange = Workbooks("Library_Database.xlsx")_ 
        .Worksheets("CONFERENCE PROCEEDINGS").range("A2:H51") 

Dim title As String 
    title = IfError(VLookup(item, brange, 2, False), _ 
      IfError(VLookup(item, rbrange, 2, False), _ 
      IfError(VLookup(item, jrange, 2, False), _ 
      IfError(VLookup(item, cdrange, 2, False), _ 
      IfError(VLookup(item, cprange, 2, False), ""))))) 

End Sub 

BITTE HELFEN !!!

+1

müssen Sie die 'Application.Vlookup()' –

+0

verwenden Sie müssen auch die Application.WorksheetFunction.IfError() ' –

+0

Ich habe sowohl' Application.WorksheetFunction.IfError() 'und' Application.Vlookup hinzugefügt() 'und ich habe' title = "" 'anstelle des tatsächlichen Wertes – Marie

Antwort

0

Versuchen Sie dies. Sie müssen mit WorksheetFunction arbeiten, wenn Sie Iferror verwenden, und Sie müssen Application.VLookup verwenden (lesen Sie hier: http://dailydoseofexcel.com/archives/2004/09/24/the-worksheetfunction-method/).
Auch VBA VLookup ist empfindlich für Datentypen, wenn Sie also item as string definieren, wird es nicht funktionieren. Stattdessen sollten Sie Variant verwenden in abgedeckt werden.
Dim item As Variant

Auch müssen Sie diese Bereiche als Range definieren. Mit Ihrem aktuellen Code definieren Sie nur cprange als tatsächlichen Bereich. diese
Verwenden statt: Dim brange As Range, rbrange As Range, jrange As Range, cdrange As Range, cprange As Range

title = Application.WorksheetFunction.IfError(Application.VLookup(item, brange, 2, False), _ 
Application.WorksheetFunction.IfError(Application.VLookup(item, rbrange, 2, False), _ 
Application.WorksheetFunction.IfError(Application.VLookup(item, jrange, 2, False), _ 
Application.WorksheetFunction.IfError(Application.VLookup(item, cdrange, 2, False), _ 
Application.WorksheetFunction.IfError(Application.VLookup(item, cprange, 2, False), ""))))) 

In generel, ist es gute Praxis Option Explicit zu verwenden. Setzen Sie dies auf die absolute erste Zeile in Ihrem Modul (außerhalb Ihrer Prozedur).