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!