Clever-Excel-Forum

Normale Version: Sverweis und Wennfehler in VBA
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Zusammen, 

ich tue mir schwer die Sverweis- und Wennfehlerfunktion in VBA abzubilden. 
Folgende Formel möchte ich gerne in VBA darstellen.
Code:
=WENNFEHLER(SVERWEIS(B1;Berechnung!$D$15:$K$134;6;FALSCH);"")

So soll die errechnete Annuität von Blatt1 (Berechnung) auf Blatt2 (Annuität) übertragen werden wenn das Datum übereinstimmen.
Falls nicht soll die Zelle einfach leer beleiben. 

Den SVerweis habe ich jetzt soweit hinbekommen, der funktioniert aber nur so lange dass Datum übereinstimmt. 
Wenn es nicht übereinstimmt kommt folgende Fehlermeldung: 
Laufzeitfehler '1004':
Anwendungs- oder objektdefinierter Fehler 
Code:
Private Sub Einfügen()

   Dim LetzeZeilen As String
   LetzteZeilen = Sheets(2).Cells(Rows.Count, 1).End(xlUp).Row + 1
  

   With Sheets(2)
      .Cells(LetzteZeilen, "B") = WorksheetFunction.VLookup(Sheets(2).[B1], Sheets(1).[D15:K134], 6, False)
     
   End With
  
End Sub

Kann ich den Fehler mit einer Art WENNFEHLERFunktion in VBA umgehen ?

Danke im voraus und ein schönen Sonntag :D
Hallöchen,

z.B. in der Art:

Code:
Dim b
With Sheets(2)
   On Error Resume Next
   b = WorksheetFunction.VLookup(.[B1], Sheets(1).[D15:K134], 6, False)
   If Err Then .Cells(LetzteZeilen, "B") = "Fehler" Else .Cells(LetzteZeilen, "B") = b
End With
Hallo Andre, 

Perfekt, dass funktioniert. 
Ein bisschen habe ich die Formel umgestellt.

Code:
With Sheets(2)
      On Error Resume Next
      .Cells(letzteZeilen, "B") = WorksheetFunction.VLookup(Sheets(2).[B1], Sheets(1).[D15:K134], 6, False)
      If Err Then .Cells(letzteZeilen, "B") = "0"

Vielen Dank :D
Hallo,



noch drei Lösungsmöglichkeiten:

Code:
Private Sub Einfügen1()

   Dim LetzteZeilen  As Long
   LetzteZeilen = Sheets(2).Cells(Rows.Count, 1).End(xlUp).Row + 1

   With Sheets(2)
      .Cells(LetzteZeilen, 2) = Application.VLookup(Sheets(2).[B1], Sheets(1).[D15:K134], 6, False)
   End With
 
End Sub

Private Sub Einfügen2()

   Dim LetzteZeilen  As Long
   LetzteZeilen = Sheets(2).Cells(Rows.Count, 1).End(xlUp).Row + 1
 

   With Sheets(2)
      If IsError(Application.VLookup(Sheets(2).[B1], Sheets(1).[D15:K134], 6, False)) Then
         .Cells(LetzteZeilen, 2) = "Fehler"
      Else
         .Cells(LetzteZeilen, 2) = Application.VLookup(Sheets(2).[B1], Sheets(1).[D15:K134], 6, False)
      End If
   End With
 
End Sub

Private Sub Einfügen3()

   Dim LetzteZeilen  As Long
   LetzteZeilen = Sheets(2).Cells(Rows.Count, 1).End(xlUp).Row + 1
 
   With Sheets(2)
      .Cells(LetzteZeilen, 2) = IIf(IsError(Application.VLookup(Sheets(2).[B1], Sheets(1).[D15:K134], 6, False)), "Fehler" _
      , Application.VLookup(Sheets(2).[B1], Sheets(1).[D15:K134], 6, False))
   End With
 
End Sub



Im ersten Fall wird die Funktion ohne Fehlerbehandlung genutzt. Bei Fehler wird #NV in die Zelle geschrieben.