Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Sverweis und Wennfehler in VBA
#1
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


Angehängte Dateien
.xlsm   Annuität .xlsm (Größe: 86,54 KB / Downloads: 0)
Antworten Top
#2
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
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#3
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
Antworten Top
#4
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.
Gruß Atilla
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste