Hallo Jörg,
mit nachstehendem Makro möchte ich die folgende Formel so einfügen, dass sie sich praktisch an die nächste Zeile anpaßt.
So wie Du höchstwahrscheinlich denkst geht das nicht!
Und nun die ausführliche Antwort.
Das ist schon mal der richtige weg.
ABER!!!
Um eine Calc-Formel wie z.B.
per Makro mit automatischer Adressierung einzutragen, also das anpassen der Zell und/oder Zeilenbezüge, musst Du die Formel zerpflücken. Auch wenn eine einfache Formel wie z.B.
per Makro eingetragen werden kann, so ist sie für das Makro selber nix anderes als reiner Text. Und woher soll das Makro im Text wissen wo sich was und wann ändern soll. Das geht also nicht ganz so einfach, denn die erst genannte "Text-Formel" muss so zerlegt werden, das das Makro etwas zum berechnen hat. Und das würde so rein theoretisch wie folgt aussehen.
Code: Alles auswählen
for i = 138 to 200
tstformel ="WENN(ISTLEER(I" & i & ");""" & """;I" & i &"+14)"
next i
mycell.FormulaLocal = "=" & tstformel
Du siehst das aus einer relativ kurzen Calc-Formel schon eine kleine Monster-Text-Formel geworden ist. Und das alles nur, weill in diesem Fall der Zeilenzähler i mit einer For-Next-Schleife eingebaut wurde.
Hier fällt das noch gar nicht so sehr ins Gewicht, aber die typischen Zeichen für eine Leerzelle die "" müssen mit Vorsicht behandelt werden da man durch ihnen sehr schnell ins stolpern geraten kann. Das eben gezeigte war ja recht harmlos, aber überleg dir mal was Du da für einen Spaß bekommst wenn Du diese deine Formel auseinanderpflücken musst.
Code: Alles auswählen
=WENN(AI138="";"";WENN(H138="Ja";"";WENN(HEUTE()>AI138+14;AI138+14;"")))
Okay, man kann das wohl machen, aber je mehr Formeln man hat, und je umfangreicher sie sind, um so unangenehmer wird das ganze dann.
Kurz und Gut, auf diesem Wege wird man nicht glücklich, nein wirklich nicht.
Es müsste doch noch eine alternative geben.
Und in der Tat, die gibt es.
Als erstes musst du einen Namen für die Formel vergeben
-> Menü Einfügen
-> Namen
-> Festlegen ... Strg + F3
Und dort trägst Du deine Formel ein, als Beispiel die
und vergibst ihr den Namen
test.
Jetzt kannst Du per Makro dir die Formel automatisch eintragen lassen, welches mal als minimalbeispiel wie folgt aussieht.
Code: Alles auswählen
Sub Main
myDoc = thisComponent
mySheet = myDoc.sheets(0)
for i = 138 to 200
mycell = mysheet.getCellRangeByName("J" & i)
mycell.FormulaLocal = "=test"
next i
End Sub
Bedenke aber bitte folgendes dabei. In der Zelle steht nicht mehr die Formel, sondern der eben zugewiesene Name, also =test.
Hab dir mal ein kleines Beispiel angehängt. Wenn Du dazu fragen hast, meld dich einfach.
Gruß
balu