380 Aufrufe
Gefragt in Tabellenkalkulation von finger59 Experte (1.3k Punkte)
Hallo liebe Ecxelianer,
ich habe in einer Testdatei eine Formel entwickelt, die mir je nach Situation einen bestimmten Buchstaben herauswirft.
Die Formel selbst funktionierte vollständig. Nun wollte ich die Formel mit in ein bestehendes Marko [xurl=https://supportnet.de/ssd|SSD Festplatte einbauen und optimieren]einbauen[/url] und habe dazu den Vorgang der Formelerfassung mittels Makrorecorder aufgezeichnet. Danach habe ich das aufgezeichnete Makro in den entsprechenden Teil des bereits bestandenen Makros hineinkopiert und erhalte dann beim starten des Makros diese Fehlermeldung: Anwendungs- oder objektdefinierter Fehler  und die Formel wird dabei markiert.

Die Formel selbst sieht nach der Übertragung wie folgt aus:
 ActiveCell.FormulaR1C1 = _
        "=IF(COUNTIFS(Akgrp!R50C1:R129C1,temp!RC[-15],Akgrp!R50C2:R129C2,temp!RC[-12])=1,""S"",IF(OR(ISERROR(COUNTIFS(Akgrp!R50C1:R129C1,temp!RC[-15],Akgrp!R50C2:R129C2,temp!RC[-12])=1),temp!RC[-12]=1609,temp!RC[-12]=1615,temp!RC[-12]=1614,temp!RC[-12]=1622),""A"",IF(OR(ISERROR(COUNTIFS(Akgrp!R50C1:R129C1,temp!RC[-15],Akgrp!R50C2:R129C2,temp!RC[-12])=1),temp!RC[-12]=998),""D" & _
        "(ISERROR(COUNTIFS(Akgrp!R50C1:R129C1,temp!RC[-15],Akgpr!R50C2:R129C2,temp!RC[-12])=1),temp!RC[-12]=999),""L"",""K""))))"  

Irritierend für mich selbst war, dass er trotz manueller Eingabe der Formel die Zellbezüge von z.B.   $A$A50:$A$129  in diese R50C1
umwandelt.

Kann mir jemand sagen was ich da machen muss, damit die Formel wieder funktioniert?
Das Tabellenblatt temp wird dabei durch ein vorgeschaltestes Makro neu generiert.

Vielen Dank fürs reinschauen und in der Hoffnung, dass mir jemand weiter helfen können, möchte ich Euch allen schöne Ostertage wünschen. LG... Helmut

4 Antworten

0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Helmut,

bei der Makroaufzeichnung verwendet der Rekorder die relative Aufzeichnung und auch die englischen Formelbezeichnungen (wie du ja siehst).
Wenn du deine Formel mit FormulaLocal der Zelle zuweist, kannst du deine Formel in Deutsch und mit den Zellbezügen eingeben.
Beispiel:
[code]ActiveCell.FormulaLocal = "=Wenn(A1 <>"""";""nicht leer"";""leer"")"[/code]

Wenn ich Formeln per VBA einfüge, kopiere ich einfache Formeln einfach in das VBA-Projekt und passe sie ggf. an (siehe Beispiel oben).
Sollen Formelbezüge z.B. variabel sein, dann baue ich die Formel im VBA-Projekt nach.

Falls du Probleme hast, die Formel per VBA einzufügen, dann poste einfach mal deine Formel.

Gruß

M.O.
0 Punkte
Beantwortet von finger59 Experte (1.3k Punkte)
Hallo M.O.,
vielen Dank für Deine Infos.
Die Übertragung der Formel habe ich auf drei Arten versucht, aber alle scheiterten an der Meldung aus meiner Anfrage. Die Formel habe ich mit und ohne Makroaufzeichnung in der ersten Zelle eingetragen (händisch erfasst) und dann nach unten kopiert, sowie vorher mal in die
entsprechende Zelle reinkopiert und dann mit dem Makro aufleben lassen und ... ohne Erfolg.
Ich denke mittlerweile schon, dass der Fehler auch nicht mit der englischen oder deutschen Eintragungsweise zu tun hat, sondern irgendwo etwas anderes ist, da die anderen Formelzuweisungen ebenfalls in der englischen Version vorlagen und nicht als Fehler angezeigt wurden..
 Nur mal so zum besseren Verständnis (so sieht meine Formel aus):  Akgrp! ist ein Tabellenblatt in der aktuelle geöffneten Arbeitsmappe. Gleiches gilt für die temp!. Die temp! lasse ich erst mit diesem Makro kurz vorher erstellen. Danach kommen die Überschriften rein, noch ein wenig Formatierung und dann sollte die nachstehende Formelabfrage erfolgen:   

 =WENN(ZÄHLENWENNS(Akgrp!$A$50:$A$129;temp!B2;Akgrp!$B$50:$B$129;temp!E2)=1;"S";WENN(ODER(ISTFEHLER(ZÄHLENWENNS(Akgrp!$A$50:$A$129;temp!B2;Akgrp!$B$50:$B$129;temp!E2)=1);temp!E2=1609;temp!E2=1615;temp!E2=1614;temp!E2=1622);"A";WENN(ODER(ISTFEHLER(ZÄHLENWENNS(Akgrp!$A$50:$A$129;temp!B2;Akgrp!$B$50:$B$129;temp!E2)=1);temp!E2=998);"D";WENN(ODER(ISTFEHLER(ZÄHLENWENNS(Akgrp!$A$50:$A$129;temp!B2;Akgrp!$B$50:$B$129;temp!E2)=1);temp!E2=999);"L";"K"))))

Da die Anzahl der Zeilen in Akgrp! und temp! feststehen kann ich hier auch diese Bezüge so übernehmen.

Nachdem ich nun die FormulaR1C1 in FormulaLocal geändert und die Formel eingefügt habe, bekomme ich nun einen Kompliierungsfehler angezeigt.

Möglicherweise habe ich da die lange Formel nicht korrekt in zwei oder drei Zeilen aufgeteilt gehabt.

Aktuell habe ich die Überlegung die temp bereits fest in die Arbeitsmappe mit einzubauen und dann funktioniert auch meine Formel. Wäre dennoch schön gewesen genau zu wissen, warum es so mit dem hineinkopieren nicht geklappt hat.

Nochmals vielen Dank für Deine Infos und schöne Ostertage... LG Helmut
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Helmut,

ich habe mal eine leere Arbeitsmappe erstellt, zwei Tabellen in Akgrp und temp umbenannt und mit folgenden Code die Formel ohne Probleme in ein Tabellenblatt eingefügt:
[code]Sub formel()

ActiveCell.FormulaLocal = "=WENN(ZÄHLENWENNS(Akgrp!$A$50:$A$129;temp!B2;Akgrp!$B$50:$B$129;temp!E2)=1;""S"";WENN(ODER(ISTFEHLER(ZÄHLENWENNS(Akgrp!$A$50:$A$129;temp!B2;Akgrp!$B$50:$B$129;temp!E2)=1);temp!E2=1609;temp!E2=1615;temp!E2=1614;temp!E2=1622);""A"";WENN(ODER(ISTFEHLER(ZÄHLENWENNS(Akgrp!$A$50:$A$129;temp!B2;Akgrp!$B$50:$B$129;temp!E2)=1);temp!E2=998);""D"";WENN(ODER(ISTFEHLER(ZÄHLENWENNS(Akgrp!$A$50:$A$129;temp!B2;Akgrp!$B$50:$B$129;temp!E2)=1);temp!E2=999);""L"";""K""))))"

End Sub[/code]
Probier es einfach mal in deinem Code aus. Falls dann ein Fehler auftaucht, muss es irgendwo anders in deinem Code hängen.

Gruß

M.O.
0 Punkte
Beantwortet von finger59 Experte (1.3k Punkte)
Hallo M.O.,
sorry, ich habe erst heute gesehen, dass Du Dir mein Problem noch mal angeschaut hast und mir
einen neuen Lösungsvorschlag zugesandt hast.

Zwischenzeitlich hatte ich mich dann auch bereits zu der festen Installation des Tabellenblattes temp!
entschlossen und da habe ich dann den Übertrag auch hinbekommen.

Durch das einfügen und anschließendem löschen von temp! wollte ich mir nur Speicherplatz sparen,
da ich über 30 Akkordgruppen auf diese Art und Weise wochenweise abarbeitete und Kleinvieh summiert
sich irgendwann auch mal zu einem Haufen.

Von daher vielen lieben Dank für Deine Bemühungen und wünsche Dir und natürlich auch allen anderen
Excelsfans einen schönen warmen Freitag und ein schönes WE bevor es wieder ein wenig kühler wird...

In diesem Sinne... have a nice WE...  LG  Helmut
...