Formel-Umwandlung in VBA scheint fehlerhaft
Hallo Zusammen.
Ich habe ein Problem mit einer Formel unter Excel 2000.
Es handelt sich um diese Formel, die sonst per Excel wunderbar läuft:
Nachdem ich dies mit einem Makro aufgezeichnet habe, sieht es in VBA wie folgt aus:
Starte ich nun mein Makro, kommt ein Fehler:
Laufzeitfehler 1004
Anwendungs- oder objektdefinierter Fehler.
Wenn ich die Meldung mit "Debuggen" bestätige, markiert er mir die oben genannte Zeile.
Hat jemand eine Idee?
Gruß
Ich habe ein Problem mit einer Formel unter Excel 2000.
Es handelt sich um diese Formel, die sonst per Excel wunderbar läuft:
=WENN(ISTFEHLER(VERGLEICH("UM03 =ZUGESTELLT";BP2:CC2;0));
WENN(ISTFEHLER(VERGLEICH("UM79 =ENTL.-SCAN";BP2:CC2;0));"";
INDEX(BP2:CC2;1;VERGLEICH("UM79 =ENTL.-SCAN";BP2:CC2;0)+1));
INDEX(BP2:CC2;1;VERGLEICH("UM03 =ZUGESTELLT";BP2:CC2;0)+1))
Nachdem ich dies mit einem Makro aufgezeichnet habe, sieht es in VBA wie folgt aus:
Range("CF2").Select
ActiveCell.FormulaR1C1 = _
"=ISERROR(MATCH(""UM03 =ZUGESTELLT"",RC[-69]:RC[-16],0))""UM79 =ENTL.-SCAN"",RC[-69]:RC[-16],0)),""""," & Chr(10) & " INDEX(RC[-16]:RC[-3],1,MATCH(""UM79 =ENTL.-SCAN"",RC[-16]:RC[-3],0)+1))?RC[-16]:RC[-3] 1 MATCH(""UM03 =ZUGESTELLT"",RC[-16]:RC[-3],0)"
Starte ich nun mein Makro, kommt ein Fehler:
Laufzeitfehler 1004
Anwendungs- oder objektdefinierter Fehler.
Wenn ich die Meldung mit "Debuggen" bestätige, markiert er mir die oben genannte Zeile.
Hat jemand eine Idee?
Gruß
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 157375
Url: https://administrator.de/contentid/157375
Ausgedruckt am: 26.11.2024 um 02:11 Uhr
8 Kommentare
Neuester Kommentar
Hallo user1234!
Du hast u.a. die IF's alias Wenn vergessen
Versuchs mal so (FormulaLocal):
Gruß Dieter
Du hast u.a. die IF's alias Wenn vergessen
Versuchs mal so (FormulaLocal):
Range("CF2").FormulaLocal = "=WENN(ISTFEHLER(VERGLEICH(""UM03 =ZUGESTELLT"";BP2:CC2;0));" & _
"WENN(ISTFEHLER(VERGLEICH(""UM79 =ENTL.-SCAN"";BP2:CC2;0));"""";" & _
"INDEX(BP2:CC2;1;VERGLEICH(""UM79 =ENTL.-SCAN"";BP2:CC2;0)+1));" & _
"INDEX(BP2:CC2;1;VERGLEICH(""UM03 =ZUGESTELLT"";BP2:CC2;0)+1))"
Gruß Dieter
Hallo user1234!
Deine Formel wird explizit nach Deiner Vorgabe in die Zelle geschrieben:
Und wenn Deine Formel nicht richtig funktioniert, dann liegt das keinesfalls am VBA-Code
Gruß Dieter
Deine Formel wird explizit nach Deiner Vorgabe in die Zelle geschrieben:
=WENN(ISTFEHLER(VERGLEICH("UM03 =ZUGESTELLT";BP2:CC2;0));WENN(ISTFEHLER(VERGLEICH("UM79 =ENTL.-SCAN";BP2:CC2;0));"";INDEX(BP2:CC2;1;VERGLEICH("UM79 =ENTL.-SCAN";BP2:CC2;0)+1));INDEX(BP2:CC2;1;VERGLEICH("UM03 =ZUGESTELLT";BP2:CC2;0)+1))
Gruß Dieter
Moin user1234,
ich denke auch, wir reden hier von 2 Baustellen.
Das eine ist das stumpfsinnige Konvertieren der Cell/Range-Properties .Formala/.FormulaLocal/.FormulaR1C1/.FormulaR1C1Local hin und her.
Dabei hat Excel keine Schwierigkeiten und es kommt auch keine sinnentstellte Formel raus.
Da kam ich bei meinen Tests zu den gleichen Ergebnissen wie didi1954.
Also muss wohl eher dein Handling beim Aufzeichnen des Makros etwas abseits des Mainstreams sein.
In deinem ersten geposteten Quelltext
ist absolut nicht reproduzierbar
a) woher denn dieses "& chr(10) & " kommen könnte ?
Hast du diese Formel mal zwischenzeitlich in der Zelle als "Text" stehen gehabt statt als Formel und dabei einen Strg-Enter-Zeilenumbruch zur Lesbarkeit eingefügt?
b) die in dem Code wiedergegebenen Row/Column-Referenzen "RC[-69]:RC[-16]" sind absolut unerklärlich.
Und auch nicht reprozierbar bei einer Eingabe der "Zell-Formel" in Zelle CF2 und anschliessendem Makro-Aufzeichnen.
ist dieser Effekt denn bei dir reproduzierbar, wenn du in einem "leeren" Arbeitsblatt in Zelle CF2 didi1954s Formel "makrorecordest"?
Grüße
Biber
Nachtrag:
Es könnte ein falsches Handling beim Makro-Recorden sein.
Falls der FormelText in der Zelle z.B.CF2 > 255 Zeichen ist, (und das ist er!),
Weil:
Nur das zweite klappt bei Formel-Texten > 255 Zeichen <= 1024 Zeichen.
Praktikanten halt.
nochmal Grüße
Biber
ich denke auch, wir reden hier von 2 Baustellen.
Das eine ist das stumpfsinnige Konvertieren der Cell/Range-Properties .Formala/.FormulaLocal/.FormulaR1C1/.FormulaR1C1Local hin und her.
Dabei hat Excel keine Schwierigkeiten und es kommt auch keine sinnentstellte Formel raus.
Da kam ich bei meinen Tests zu den gleichen Ergebnissen wie didi1954.
Also muss wohl eher dein Handling beim Aufzeichnen des Makros etwas abseits des Mainstreams sein.
In deinem ersten geposteten Quelltext
ActiveCell.FormulaR1C1 = _
"=ISERROR(MATCH(""UM03 =ZUGESTELLT"",RC[-69]:RC[-16],0))""UM79 =ENTL.-SCAN"",RC[-69]:RC[-16],0)),""""," & Chr(10) & " INDEX(RC[-16]:RC[-3],1,MATCH(""UM79 =ENTL.-SCAN"",RC[-16]:RC[-3],0)+1))?RC[-16]:RC[-3] 1 MATCH(""UM03 =ZUGESTELLT"",RC[-16]:RC[-3],0)"
a) woher denn dieses "& chr(10) & " kommen könnte ?
Hast du diese Formel mal zwischenzeitlich in der Zelle als "Text" stehen gehabt statt als Formel und dabei einen Strg-Enter-Zeilenumbruch zur Lesbarkeit eingefügt?
b) die in dem Code wiedergegebenen Row/Column-Referenzen "RC[-69]:RC[-16]" sind absolut unerklärlich.
Und auch nicht reprozierbar bei einer Eingabe der "Zell-Formel" in Zelle CF2 und anschliessendem Makro-Aufzeichnen.
ist dieser Effekt denn bei dir reproduzierbar, wenn du in einem "leeren" Arbeitsblatt in Zelle CF2 didi1954s Formel "makrorecordest"?
Grüße
Biber
Nachtrag:
Es könnte ein falsches Handling beim Makro-Recorden sein.
Falls der FormelText in der Zelle z.B.CF2 > 255 Zeichen ist, (und das ist er!),
- dann darfst du nicht beim Makrorekorden einen Doppelklick auf die Zelle ausführen (oder mit F2 den Zellinhalt markieren)
- sondern nur die Zelle selektieren ("auf die Zelle gehen") und dann mit "Strg-C/Strg-V " oder "Kopieren/Einfügen" hantieren.
Weil:
- Text im Bearbeitungsmodus einfügen -> Makrorecorder: "ActiveCell.FormulaR1C1 = "<deineFormelInDerzelle>"".
- Formel-Text einfügen ohne "Bearbeitungsmodus" -> "ActiveSheet.Paste"
Nur das zweite klappt bei Formel-Texten > 255 Zeichen <= 1024 Zeichen.
Praktikanten halt.
nochmal Grüße
Biber
Hallo user1234!
Du kannst beim Vergleichstyp 0 auch Platzhalter (*?) verwenden z.B. "*UM03\*" oder "UM03*Zugest*"
Gruß Dieter
Du kannst beim Vergleichstyp 0 auch Platzhalter (*?) verwenden z.B. "*UM03\*" oder "UM03*Zugest*"
Gruß Dieter