VBA Programmierung / Excel - Formel wird per Makro in Excel eingefügt und liefert Fehler

snoopy999

Cadet 2nd Year
Registriert
Sep. 2023
Beiträge
23
Hallo zusammen,

ich habe mir in VBA über Makro aufzeichnen eine Formel, welche ich manuell erstellt habe, kopiert, weil ich gerne das was ich manuell mache, per Makro tun möchte.

Das Makro ist relativ einfach, es tut einfach zu der Zelle P2 gehen und eine sehr lange Formel dort reinkopieren.

Wenn ich das Makro aber dann abspiele bekomme ich den Fehler 1004, finde aber nirgendwo genauere Informationen, was der Fehler ist.

Google hat mir hier leider auch nicht geholfen.

Könnte mir vorstellen, dass die Formel eventuell zu lang ist?

Aber warum geht Sie dann manuell in Excel?

Hier mal die Gegenüberstellung: VBA (aufgezeichnet) gegen manuelle Formel in Excel

=WENN(UND(N2="M";U2="WAHR");(LINKS(F2;R2)*1000000);WENN(UND(N2="B";U2="WAHR");(LINKS(F2;R2)*1000000000);WENN(N2="B";(LINKS(J2;R2)*1000000000);WENN(UND(N2="K";U2="WAHR");(LINKS(F2;R2)*1000);WENN(N2="K";(LINKS(F2;R2)*1000);WENN(N2="M";(LINKS(J2;R2)*1000000);WENN(N2="B";(LINKS(J2;R2)*1000000000);WENN(N2="%";(LINKS(J2;R2)*1);WENN(ISTFEHLER(H2);F2;WENN(ISTZAHL(H2);J2))))))))))

und hier der per Makro aufzeichnen erstellte Code.
Wenn ich eben diesen Code im Makro aufrufe, bekomme ich den 1004 Fehler, allerdings habe ich keine Ahnung wie ich das lösen kann. An dem Problem hänge ich schon 3 Tage ohne Lösung.

Range("P2").Select

Range("P2").FormulaLocal = _
"=IF(AND(RC[-2]=""M"",RC[5]=""WAHR""),(LEFT(RC[-10],RC[2])*1000000),IF(AND(RC[-2]=""B"",RC[5]=""WAHR""),(LEFT(RC[-10],RC[2])*1000000000),IF(RC[-2]=""B"",(LEFT(RC[-6],RC[2])*1000000000),IF(AND(RC[-2]=""K"",RC[5]=""WAHR""),(LEFT(RC[-10],RC[2])*1000),IF(RC[-2]=""K"",(LEFT(RC[-10],RC[2])*1000),IF(RC[-2]=""M"",(LEFT(RC[-6],RC[2])*1000000),IF(RC[-2]=""B"",(LEFT(RC[-6],RC[2" & _
"00000),IF(RC[-2]=""%"",(LEFT(RC[-6],RC[2])*1),IF(ISERROR(RC[-8]),RC[-10],IF(ISNUMBER(RC[-8]),RC[-6]))))))))))"

Range("P2").Select
Selection.AutoFill Destination:=Range("P2:P23")
Range("P2:P23").Select


Vielen Dank für eure Hilfe
 
Macros und Programmcode am besten im Code-Tag einbetten.

- edit -
sieht die Formel nach dem Einfügen so aus wie aus der Quelle, bzw wie sie soll?
woher kopierst Du die Formel, oder hast Du die Formel "fix" im Macro stehen und fügst das ein?
 
Zuletzt bearbeitet:
Meine Analyse:

Entweder hast du einen Copy/Paste-Fehler gemacht oder der Code stammt nicht vom Makro-Recorder in Excel.

  1. Mich stört das FormulaLocal. Wenn man mit einem deutschen Excel arbeitet, worauf deine Excel Formel hindeutet, dann müssen bei FormulaLocal auch deutsche Formeln benutzt werden.
    Da du in deinem VBA-Code englische Formeln nutzt, musst du Formula oder FormulaR1C1 nutzen. Letzteres hat z.B. der Makro-Recorder von meinem deutschen 2019er Excel benutzt.

    Stammt der Code wirklich vom Makro-Recorder deiner Excel-Version? Oder stammt der Code von einem anderen User, der vielleicht ein englisches Excel nutzt? (wobei ich nicht weiß, ob ein englisches Excel überhaupt FormulaLocal nutzen würde)


  2. Bei der VBA-Codezeile (von VBA auf einen 3-Zeiler aufgesplittet)...
    Code:
    Range("P2").FormulaLocal = _
    "=IF(AND(RC[-2]=""M"",RC[5]=""WAHR""),(LEFT(RC[-10],RC[2])*1000000),IF(AND(RC[-2]=""B"",RC[5]=""WAHR""),(LEFT(RC[-10],RC[2])*1000000000),IF(RC[-2]=""B"",(LEFT(RC[-6],RC[2])*1000000000),IF(AND(RC[-2]=""K"",RC[5]=""WAHR""),(LEFT(RC[-10],RC[2])*1000),IF(RC[-2]=""K"",(LEFT(RC[-10],RC[2])*1000),IF(RC[-2]=""M"",(LEFT(RC[-6],RC[2])*1000000),IF(RC[-2]=""B"",(LEFT(RC[-6],RC[2" & _
    "00000),IF(RC[-2]=""%"",(LEFT(RC[-6],RC[2])*1),IF(ISERROR(RC[-8]),RC[-10],IF(ISNUMBER(RC[-8]),RC[-6]))))))))))"

    ...ist in Zeile 3 ganz am Anfang ein Fehler: Es fehlen 2 Sonderzeichen und ein paar Ziffern. Das ist das, was ich mit Copy/Paste-Fehler meinte.

    Ersetze das "00000" durch "])*1000000000" (ohne ""-Zeichen), danach wird dein Code funktionieren.

Hier der vollständige Code inkl. notwendigen Modifikationen in Zeile 3 (FormulaR1C1) und am Anfang von Zeile 5:
Code:
Range("P2").Select

Range("P2").FormulaR1C1 = _
"=IF(AND(RC[-2]=""M"",RC[5]=""WAHR""),(LEFT(RC[-10],RC[2])*1000000),IF(AND(RC[-2]=""B"",RC[5]=""WAHR""),(LEFT(RC[-10],RC[2])*1000000000),IF(RC[-2]=""B"",(LEFT(RC[-6],RC[2])*1000000000),IF(AND(RC[-2]=""K"",RC[5]=""WAHR""),(LEFT(RC[-10],RC[2])*1000),IF(RC[-2]=""K"",(LEFT(RC[-10],RC[2])*1000),IF(RC[-2]=""M"",(LEFT(RC[-6],RC[2])*1000000),IF(RC[-2]=""B"",(LEFT(RC[-6],RC[2" & _
"])*1000000000),IF(RC[-2]=""%"",(LEFT(RC[-6],RC[2])*1),IF(ISERROR(RC[-8]),RC[-10],IF(ISNUMBER(RC[-8]),RC[-6]))))))))))"

Range("P2").Select
Selection.AutoFill Destination:=Range("P2:P23")
Range("P2:P23").Select
 
Zuletzt bearbeitet:
Danke euch, ich habe es gelöst!
Der Fehler lag in meiner Verwendung der Formel UND()

ich poste später zum vergleich die nun geupdateten formeln
Ergänzung ()

Ich stelle die Quell-Datei und das aktuelle Makro gerne zur Verfügung und würde mich über Optimierungsvorschläge freuen.

Meine Programmierkenntnisse sind nicht so "advanced", aber ich kriege in der Regel irgendwas zusammen-gefrickelt, was dann auch funktioniert.

Ein Problem habe ich noch: Dazu muss ich aber etwas in einer Schleife abfragen usw und da kam ich letztens nicht so gut klar. Poste ich später.
 
Zuletzt bearbeitet:
Zurück
Oben