Haben Pferde Vorurteile? Denkt zum Beispiel ein Galopppferd von einem Dressurpferd ‚diese Tunte‘?

Hallo Herr Martin,

dieses Mal ist mir ein etwas seltsames Verhalten von VBA aufgefallen, wahrscheinlich kennen Sie das, mir ist es eben zum ersten Mal begegnet.

Ich habe in diesem Beispiel eine sehr simple Schleife mit der Vlookup-Funktion.

In „Sheets(„Tabelle2“).Range(„A:B“)“ stehen die Daten, die ich in „Sheets(„Tabelle1“).Cells(i, 2) hineinspielen möchte.

Ich weiß, ist nicht elegant, aber mir geht es um die Funktion an sich.

Sub Test()

Dim i As Integer

For i = 2 To 11

If Not IsError(Application.WorksheetFunction.VLookup(Cells(i, 1).Value, Sheets(„Tabelle2“).Range(„A:B“), 2, False)) Then

Sheets(„Tabelle1“).Cells(i, 2).Value = Application.WorksheetFunction.VLookup(Cells(i, 1).Value, Sheets(„Tabelle2“).Range(„A:B“), 2, False)

Else:

Sheets(„Tabelle1“).Cells(i, 2).Value = „Fehler“

End If

Next i

End Sub

Verwende ich für Vlookup die Schreibweise Application.WorksheetFunction.VLookup, dann bleibt die Schleife beim ersten Wert hängen, den er nicht findet und gibt den Laufzeitfehler 1004 aus (Die Vlookup-Eigenschaft des WorksheetFunction-Objektes kann nicht zugeordnet werden). Der Versuch, mit „If not isError“ den Fehler abzufangen, schlägt fehl.

Verwende ich jedoch die Schreibweise Application.VLookup, dann funktioniert alles perfekt und in „Sheets(„Tabelle1“).Cells(i, 2).Value“ wird „Fehler“ hineingeschrieben.

Ein identisches Verhalten zeigen auch andere Funktionen, wie Application.WorksheetFunction.Match.

Verstehen Sie das?

Danke Ihnen und viele Grüße,

Hallo Herr D.

Der Code sieht korrekt aus. Ich kann dazu nur Folgendes sagen:

Letzte Woche habe ich ein VBA-Add-In für einen Kunden erweitert – ich wollte Daten per Formeln aufbereiten, um darauf ein Diagramm aufzusetzen.

Die Formel sah so aus:

xlBlattDiagramm.Range(„B“ & intZeilenDiagramm + 3).Offset(intZeilenDiagramm – 2)).FormulaR1C1 = _

        „=OFFSET(R1C1,0,“ & (intBereichsSpalten + 1) & „-COUNTIF(R[-“ & (intZeilenDiagramm + 1) & „]C:R[-“ & (intZeilenDiagramm + 1) & „]C[“ & (intBereichsSpalten – 1) & „],MAX(R[-“ & (intZeilenDiagramm + 1) & „]C:R[-“ & (intZeilenDiagramm + 1) & „]C[“ & (intBereichsSpalten – 1) & „])))“

    ‚ — =BEREICH.VERSCHIEBEN($A$1;0;9-ZÄHLENWENN(B2:I2;MAX(B2:I2)))

Bei mir lief es hervorragen – der Kunde erhielt auf mehreren Rechnern eine Fehlermeldung – Laufzeitfehler 1004.

Deutlich: ich habe keine Ahnung warum!

Statt einer programmierten Formel habe ich dann die Daten mit einer Schleife aufbereitet – das geht immer …

Heißt: sorry, ich weiß den Grund nicht!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.