Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1680to1684
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

FormulaLocal zu lang

FormulaLocal zu lang
13.03.2019 11:01:31
FLehmann
Hallo!
Ich möchte in meinen VBA-Code eine FormulaLocal einfügen, jedoch ist die Zeile zu lang. Wie kann ich das umgehen?
Diese Formel soll eingefügt werden, ist aber zu lang.
Sheets(1).Range("D" & intI).FormulaLocal = "=WENN(UND(ISTZAHL(Risiko1!D27);ISTZAHL(Risiko1!K27);ISTZAHL(Risiko1!R27);ISTZAHL(Risiko1!Y27));WENN(UND(Risiko1!D27<19;Risiko1!K27<19;Risiko1!R27<19;Risiko1!Y27<19);"Risiko ertragbar!";WENN(ODER(UND(Risiko1!D27>18;Risiko1!D27<37);UND(Risiko1!K27>18;Risiko1!K27<37);UND(Risiko1!R27>18;Risiko1!R27<37);UND(Risiko1!Y27>18;Risiko1!Y27<37));WENN(ODER(Risiko1!D27>36;Risiko1!K27>36;Risiko1!R27>36;Risiko1!Y27>36);"Risiko NICHT ertragbar!";"Risiko ertragbar unter Einhaltung aller Schutzmaßnahmen!");WENN(ODER(Risiko1!D27>36;Risiko1!K27>36;Risiko1!R27>36;Risiko1!Y27>36);"Risiko NICHT ertragbar!";"Fehler!")));"Rechnung steht noch aus!")"
~f~
Theoretisch soll der Sheetname "Risko1" noch durch folgenden Befehl ersetzt werden Sheets(intRisiko + 1).Name. Das würde dann so aussehen, aber macht alles nur noch länger...
~f~
Sheets(1).Range("D" & intI).FormulaLocal = "=WENN(UND(ISTZAHL(" & Sheets(intRisiko + 1).Name & "!D27);ISTZAHL(" & Sheets(intRisiko + 1).Name & "!K27);ISTZAHL(" & Sheets(intRisiko + 1).Name & "!R27);ISTZAHL(" & Sheets(intRisiko + 1).Name & "!Y27));WENN(UND(" & Sheets(intRisiko + 1).Name & "!D27<19;" & Sheets(intRisiko + 1).Name & "!K27<19;" & Sheets(intRisiko + 1).Name & "!R27<19;" & Sheets(intRisiko + 1).Name & "!Y27<19);"Risiko ertragbar!";WENN(ODER(UND(" & Sheets(intRisiko + 1).Name & "!D27>18;" & Sheets(intRisiko + 1).Name & "!D27<37);UND(" & Sheets(intRisiko + 1).Name & "!K27>18;" & Sheets(intRisiko + 1).Name & "!K27<37);UND(" & Sheets(intRisiko + 1).Name & "!R27>18;" & Sheets(intRisiko + 1).Name & "!R27<37);UND(" & Sheets(intRisiko + 1).Name & "!Y27>18;" & Sheets(intRisiko + 1).Name & "!Y27<37));WENN(ODER(" & Sheets(intRisiko + 1).Name & "!D27>36;" & Sheets(intRisiko + 1).Name & "!K27>36;" & Sheets(intRisiko + 1).Name & "!R27>36;" & Sheets(intRisiko + 1).Name & "1!Y27>36);"Risiko NICHT ertragbar!";"Risiko ertragbar unter Einhaltung aller Schutzmaßnahmen!");WENN(ODER(" & Sheets(intRisiko + 1).Name & "!D27>36;" & Sheets(intRisiko + 1).Name & "!K27>36;" & Sheets(intRisiko + 1).Name & "!R27>36;Risiko1!Y27>36);"Risiko NICHT ertragbar!";"Fehler!")));"Rechnung steht noch aus!")"
Vielen Dank für eure Hilfe!
Liebe Grüße,
Rike

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: FormulaLocal zu lang
13.03.2019 11:18:27
Daniel
HI
wenn der Text nur für VBA zu lang ist, dann solltest du den Text erst einer Variablen zuweisen, dabei kannst du den Text in kleinere "Häppchen" aufteilen:
dim FO as String
FO = "erster Teil"
FO = FO & "zweiter Teil"
FO = FO & "dirtter Teil"
usw
Range(...).FormulaLocal = FO
dabei würde ich dann Werte, die durch Variablen gebildet werden, erstmal durch einen Dummy-Text der sonst in der Formel nicht vorkommt darstellen und am Schluss den Dummy-Text durch den gewünschten ersetzen:
FO =  "=WENN(UND(ISTZAHL('_Risiko_'!D27);ISTZ...")
FO = Replace(FO, "_Risiko_", Sheets(intRisiko + 1).Name
Range(...).Formula = FO

auch das macht dir die Codetexte übersichtlicher (vorallem, wenn du den gleichen Wert mehrfach verwendest)
problematisch wird's, wenn die Formel selbst zu lang ist, hier ist das Limit für VBA kleiner als bei Handeigabe (für VBA darf die Formel nur c.a. 1000 Zeichen lang sein, bei Handeingabe sind c.a. 4000 möglich).
Dann helfen nur ein paar Tricks:
1. englische Formeln verwenden (da sind die Funktionsnamen kürzer)
2. Tabellenblätter vorher auf 1-Buchstabennamen umbennen und nach der Formeleingabe wieder zurückänderen (Formeln werden automatsich angpasst)
Wenn das nicht reicht, hilft noch folgender Trick
3. Formel als normalen Text in die Zelle schreiben, hierzu einfach vor das Gleichheitszeichen einen Dummy-Text setzen:
FO = "xxx=..."

und nach eingabe des Textes den Dummy-Text durch nichts ersetzen. Excel wandelt dann den Text in die Formel um und dabei gelten dann wieder die Limits für Excel und nicht die von VBA.
Allerdings muss die Formel dann in Englisch mit A1-Bezügen geschrieben sein.
Gruß Daniel
Anzeige
AW: FormulaLocal zu lang
13.03.2019 11:59:22
FLehmann
Ohje…
Dann ist das ja wirklich so schwierig wie ich dachte...
Vielen Dank für deine Hilfe, Daniel!
LG,
Rike
Nein, ist es nicht, ...
13.03.2019 16:20:50
Luc:-?
…Rike;
Daniel hat sich von der scheinbaren Länge deiner Fml täuschen lassen (bzw war davon abgeschreckt). Die Fml ist effektiv nur gut 650 Zeichen lang (abhängig von der Länge der BlattNamen). Du hast aber Fehler gemacht:
1. Interne " um Texte herum wurden nicht verdoppelt!
2. Die VBE-Zeilenlänge (schon recht groß, aber hier nicht ausreichend) wurde nicht beachtet (ZeilenTrenner _ verwenden, maximal 24/25 untereinander möglich)!
3. Wahrscheinlich auch noch andere Fehler in der Fml; einmal ist & "1!…" enthalten!
Wenn das beachtet wird, lässt sich die Fml-Zeile auch problemlos in einem Pgm verwenden.
Gruß, Luc :-?
„Die Intelligenzmenge ist auf diesem Planeten eine Konstante, die Bevölkerung nimmt aber zu!“ Auch deshalb informieren mit …
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige