BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

[Gelöst] Bedingte Formatierung per Makro setzen.

CALC ist die Tabellenkalkulation, die Sie immer wollten.
balu
Beiträge: 370
Registriert: Mi 1. Jun 2011, 16:21

Re: [Gelöst] Bedingte Formatierung per Makro setzen.

Beitrag von balu » Do 28. Nov 2019, 20:01

Na'bend Hans,
Bezogen auf nur einen Monat, habe ich nur drei Regeln.
A:C, D , E:G
Bei dir kommen 7 Regeln raus, also eines für jede Spalte.
Regeln? Regeln? Regeln?
Ich glaube da hat sich zwischen der LO 5.1.x.x und der 6.3.3.2 wieder so einiges geändert. Aber wovon Du da wohl sprichst ist nur Fassade, während das Makro ein anderes Thema ist. Egal.

Ich hatte jetzt noch mal in meine und deine SUB einen kleinen "Turbo-Boost" eingebaut. Mit dem Ergebniss das der Boost in meinem Oldie Office spürbare Geschwindigkeitsvorteile brachte. Beide SUBs waren bis auf sehr wenige Zehntelsekunden gleichauf. Ich würde sagen das meine SUB vielleicht nur 0,15 sekunden langsamer war. Das gleiche Ergebnis bekam ich auch in AOO 4.1.5 zu sehen. Okay, Zeitangabe ist nur ein Schätzungswert. Jedoch ohne den Boost ist schon ein etwas größerer Zeitunterschied feststellbar. Es gäbe wohl noch einen zweiten anwendbaren Boost, den ich jetzt aber nicht mehr testen werde, da ich keine Lust mehr dazu habe.

Okay, die gleiche Datei die im Oldie und in AOO funzt, tuts überhaupt nicht in LO 5.1.5.2. Keine Ahnung warum das so ist. Nehme ich aber den Boost dort raus, ja meii ......... ich glaub ich steh im Walde ... Schneckenpost erster Güte. Selbst ohne Boost sind meine beiden Lieblinge fast um den Faktor 3 schneller. Ja, das betrifft auch deine SUB. Sehr Märkwürrrzick :roll:


A-propo Variablennamen!
Gewöhn dir sicherheitshalber folgendes an.
Jede FOR wird mit dem gleichen Zähler hochgezählt, und nicht einfach NEXT.
Beispiel.

Code: Alles auswählen

For i = 0 to 3
[...]
next
Funktioniert wohl. Ist jedoch sehr unklug, besonders dann wenn man mehrere weit gestreute und verschachtelte Schleifen hat. Denn dann wird es sehr schnell sehr unübersichtlich.
Besser ist das.

Code: Alles auswählen

For i = 0 to 3
[...]
next i


Gruß
balu

hanhug
Beiträge: 14
Registriert: So 17. Nov 2019, 21:19

Re: [Gelöst] Bedingte Formatierung per Makro setzen.

Beitrag von hanhug » Fr 29. Nov 2019, 11:02

Guten morgen Balu und allen anderen,
balu hat geschrieben: Regeln? Regeln? Regeln?
Ich glaube da hat sich zwischen der LO 5.1.x.x und der 6.3.3.2 wieder so einiges geändert. Aber wovon Du da wohl sprichst ist nur Fassade, während das Makro ein anderes Thema ist. Egal.
Fasade? Dies glaube ich weniger.
Zu einem sieht man (jedenfalls bei mir mit LO 6.3.x)das jede Spalte für sich beim Aufbau abgearbeitet wird.
Sieht man danach in die Bedingte Formatierung rein, so hat jede Spalte Ihre eigene Regel, wobei man in diesem Beispiel Spalte A bis C zusammen fassen könnte.
Schlussendlich haben aber beide Arten den selbigen Effekt, falls du dies mit Fassade meintest, ja.



Ich hatte jetzt noch mal in meine und deine SUB einen kleinen "Turbo-Boost" eingebaut. Mit dem Ergebniss das der Boost in meinem Oldie Office spürbare Geschwindigkeitsvorteile brachte.
Wie war das nochmals...
von daher wäre es ja wohl mehr als Fair wenn Du deine überarbeitete Version hier anhängen würdest.
:D Nein nur ein kleiner Spass. Aber jetzt bin ich wirklich neugirig wie man in beiden Versionen, so mal auf die schnelle, einen Turbo einbauen könnte. Jetzt egal ob dieser Funktioniert oder nicht.

Und...
Es gäbe wohl noch einen zweiten anwendbaren Boost,
Nein, diesen brauchst du jetzt nicht umzusetzen, aber interesannt ist es allemal zu wissen, was du dir vorgestellt hattest. Dann kann ich mal probieren diesen umzusetzen



A-propo Variablennamen!

Code: Alles auswählen

For i = 0 to 3
[...]
next i
Danke für den TIpp, gleich noch mit eingefügt.



Meine Case Schleife habe ich jetzt ein wenig überarbeitet.
So sieht diese jetzt bei mir, für ein ganzes Jahr, aus.
Keine 12 maligen wiederholungen.

Code: Alles auswählen

for x = 1 to 12
		
'Einstellungen für jeden Monat
Select Case x
	Case Is > 1
		MonatStartCol = MonatStartCol + Shift_Datum_Monat
		MonatEndCol = MonatEndCol + Shift_Datum_Monat
End Select
		
Select Case x
	Case 1
		REM JANUAR
		MonatStartCol = 0
		MonatEndCol = 6
		MonatEndRow = 33
	Case 2
		REM FEBRUAR
		MonatEndRow = MonatEndRow - 2
	Case 3
		REM MÄRZ
		MonatEndRow = MonatEndRow + 2
	Case 4, 6, 9, 11
		REM APRIL, JUNI, SEPTEMBER, NOVEMBER
		MonatEndRow = MonatEndRow - 1
	Case 5, 7, 10, 12
		REM MAI, JULI, OKTOBER, DEZEMBER
		MonatEndRow = MonatEndRow + 1
	Case 8
		REM AUGUST
		MonatEndRow = MonatEndRow
End Select
Grüße
Hans

balu
Beiträge: 370
Registriert: Mi 1. Jun 2011, 16:21

Re: [Gelöst] Bedingte Formatierung per Makro setzen.

Beitrag von balu » Fr 29. Nov 2019, 13:52

Mahlzeit Hans,
Sieht man danach in die Bedingte Formatierung rein, so hat jede Spalte Ihre eigene Regel
Ich glaube Du verstehst nicht so wirklich worauf ich hinaus wollte, also jetzt mal andersrum.

Excel bis, ich glaube zur 2003er Version, SO bis zur 9er, OO.o von Anfang an bis zur letzten, AOO seit Anfang und LO von Anfang bis zur ??? Version hatten in der Bedingten Formatierung nur 3 Bedingungen über das Menü zur Auswahl. Regeln gabs da nicht. Und wie das jetzt in der 6er Linie aussieht, das mit Regeln, keine Ahnung. Ich weiss wohl das in meiner 5er Version es in der Bed.For. so etwas wie eine Übersicht aller Formatierungen gibt, und wenn man auf eine kllickt um sie zu bearbeiten, gibt es dort auch die Bedingungen von 1. bis zur Xten. Aber Regeln sehe ich nicht oder ich verstehe es nicht.

Jetzt kapito?

Aber jetzt bin ich wirklich neugirig wie man in beiden Versionen, so mal auf die schnelle, einen Turbo einbauen könnte. Jetzt egal ob dieser Funktioniert oder nicht.
Juuuhhhhuuuu! Du bist neugierig geworden. Ziel erreicht :lol:

Also dann werde ich dich nicht länger auf die Folter spannen.

Es gibt eigentlich 3 Arten wie man einen Boost aktivieren kann.
1.
Bildschirm Aktualisierung Aus- beziehungsweise Einschaltten.
Nützlich wenn man auf dem Tabellenblatt wo man sich grad befindet die Aktualisierung des Bildschirms nicht so sehr miterleben möchte. Das spart schon Zeit ein. Habe jetzt keine Lust dazu das in meiner 5er LO zu testen (weiss jetzt auch nicht ob dort XRAY installiert ist).
Auf jeden Fall ist es das wovon ich erzählte.

2.
Wer sagt denn das man dem Programm unbedingt zuschauen muss wenn es in der Tabelle irgendwas rumkritzelt. Also das Makro einfach von einem anderen Tabellenblatt aus starten. Das kannst Du ja selber mal testen, in dem Du auf der "Tabelle1" den Button hinlegst, von dort aus das Makro startest, und wenn Makro fäddisch einfach auf das andere Blatt per Makro wechseln. Dürfte der gleiche Effekt sein wie Punkt 1.

Und das wäre derjenige den ich als zweiten angedeutet hatte.

3.
Verdammt schwer, und habe ich jetzt auch keine Lust dazu das zu erarbeiten. Denn dabei wird mit ARRAY gearbeitet. Das läuft dann in etwa so ab.
Den gesamten Zellbereich, also alle Monate, in ein ARRAY einlesen, die gesamte Arbeit in diesem ARRAY erledigen, und danach das ARRAY wieder aufs Tabellenblatt zurückschreiben. Das wäre dann der, ... ich sags mal so rum ..., "Hyper-Speed". Es gibt dann nix schnelleres mehr.

Natürlich ist es da von Vorteil wenn das Makro schon im Vorfeld weitestgehend optimiert ist.


Zu deiner Überarbeitung.
Selbst wenn meine Beispieldatei etwas langsamer ist als dein jetziger Code, so legst Du dennoch einfach viel zu viel Hand an um estwas auszurechnen. Ich lasse wirklich das Makro für mich arbeiten, während Du FÜR das Makro arbeitest. Klar ist mein Makro Gerschwindigkeitsmäßig nicht optimiert, aber es ist ersichtlich das ich Rechnen lasse.

Das könntest Du aber auch bei dir anwenden, das das Makro selber rechnet.
Deine Idee bestimmte Monate zu Gruppieren, da sie gleich lang sind, ist wohl nicht schlecht. Aber die Monatslänge kannst Du doch vom Makro selber ausrechnen lassen. Wenn ein Tabellenblatt schon mit Datum und Zeit umgehen kann, dann kann das ein Makro auch.

Was machst Du im Makro hiermit?

Code: Alles auswählen

MonatEndRow = MonatEndRow - 2
DU rechnest FÜR das Makro. Und deine Berechnungen sind Statisch, sie reagieren nicht flexibel, was dann Dynamisch wäre. Für nächtes Jahr, also 2020, passt das ja auch alles. Aber was ist mit diesem Jahr, oder den Jahren nach 2020? Da musst Du wieder Hand anlegen, was Plöte ist.

Hier mal eine kurze Spiel-SUB, die dir zeigt das man auch das Makro rechnen lassen kann.

Code: Alles auswählen

Sub WievieleTage
oFunctionAccess = CreateUnoService("com.sun.star.sheet.FunctionAccess")	
iStartJahr = 2020
iMonat = 2
iTage = oFunctionAccess.callFunction( "TAGEIMMONAT", Array(CLng(DateSerial(iStartJahr, iMonat, 1)))
PRINT iTage
End Sub
Das Startjahr (iStartJahr) ist jetzt zum testen fest vorgegeben, kannst Du aber auch später aus einer Tabellenzelle auslesen lassen.
Der Monat (iMonat) ist jetzt wohl auch fest, aber mit dem Jahr und Monat kannst Du ruhig mal ein bisschen rumspielen um zu sehen was dir diese Spiel-SUB dann ausgibt.

Die 1 in "Array(.... 1))" ist ein fester Wert der den 1. Tag eines Monat darstellt, genauso gut könntest Du jeden Wert zwischen 1 und 28 nehmen. Ich muss dir ja wohl nicht sagen warum nicht größer 28.

Die Zeile 'oFunctionAccess ...' kannst Du dann im Makro beispielsweise gleich zu Anfangs platzieren.

Jetzt überleg mal wie dir diese "Kleinigkeit" hilfreich sein kann ;-)



Gruß
balu

hanhug
Beiträge: 14
Registriert: So 17. Nov 2019, 21:19

Re: [Gelöst] Bedingte Formatierung per Makro setzen.

Beitrag von hanhug » Fr 29. Nov 2019, 22:44

Nabend balu,
balu hat geschrieben:
Sieht man danach in die Bedingte Formatierung rein, so hat jede Spalte Ihre eigene Regel
Ich glaube Du verstehst nicht so wirklich worauf ich hinaus wollte, also jetzt mal andersrum.
Und ich glaube du hast mich nie verstanden...
Ja ich weiß das bei älteren Versionen nur 3 Bedingungen möglich waren.
Mir ging es nur darum, das in deiner Variante, die Range nie vollständig ausgenutzt worden ist.
Jetzt mit zwei Bildern begleitet, genau das umkringelte meinte ich. Vielleicht habe ich mich auch immer nicht deutlich genug ausgedrückt.

Juuuhhhhuuuu! Du bist neugierig geworden. Ziel erreicht :lol:
;)

Stimmt, 1. kenne ich, bzw. aus Excels VBA und nutze ich da wo es nötig ist.
Mit StarBasic habe ich es noch nie benutzt.
Würde in diesem Fall auch keinen Sinn machen da, dies nur ab und an ausgeführt wird und der Button so oder so bei dem eigentlichem Kalender auf einer anderen Tabelle liegt. Und ich somit auch von Punkt 2. provitiere.

Zu Punkt 3. Ja das kannte ich. Macht aber in diesem Fall keinen Sinn, da ich an den eigentlichen Daten nichts änder. Bei sich verändernden Daten mag so ein Array sinnvoll sein, Array füllen im Array bearbeiten und dann zurück schreiben. Da ich aber nur Bedingte Formatierungen einfüge, macht hier ein Array keinen Sinn.

Natürlich ist es da von Vorteil wenn das Makro schon im Vorfeld weitestgehend optimiert ist.
Dies macht in jedem Fall immer Sinn. :D


Selbst wenn meine Beispieldatei etwas langsamer ist als dein jetziger Code, so legst Du dennoch einfach viel zu viel Hand an um estwas auszurechnen. Ich lasse wirklich das Makro für mich arbeiten, während Du FÜR das Makro arbeitest.
Einspruch. Das Makro ist dafür da alle Bedingten Formatierungen zu löschen und neu aufzubauen.
Dieses Marko arbeitet also für MICH. Würde man dies händisch machen, oh Gott. :lol:
Jetzt nur noch "Klick" und fertig. :mrgreen:

Was machst Du im Makro hiermit?

Code: Alles auswählen

MonatEndRow = MonatEndRow - 2
DU rechnest FÜR das Makro. Und deine Berechnungen sind Statisch,
Was ich damit mache? Ich gehe von Januar den 31 auf den Februar, den 29 über. Logisch? :lol:
Und ja, das ist genau richtig so. Auch für nächstes und übernächstes Jahr etc...
Da brauche ich nichts ausrechnen zu lassen, abgesehen vom Schaltjahr ändert sich nichts, jedenfalls nicht das ich wüsste. :D
Und immer bis zum 29 ist auch richtig. Jedenfalls in meiner Variante.
Ich schau Februar, mit einer Bedingten Formatierung, gibt es den 29. wenn ja, ok, falls nein, graut er mir die Zeile aus.
Also alles richtig.


Natürlich verstehe ich auch was du mir sagen wolltest.
In diesem Fall aber würde es nichts, sogar den Nachteil mit sich bringen, das in nächsten Jahr "Februar" er mir die Formatierung nur bis zum 28. setzen würde und ich somit den 29 nicht ausgrauen könnte.

Jetzt überleg mal wie dir diese "Kleinigkeit" hilfreich sein kann ;-)
Danke trotzdem für alles, schon durch deinen ersten Post konntest du mir eine Lösung aufgezeigen, welches ich umsetzen konnte und jetzt perfekt arbeitet.

Wie sagt man so schön ... Viele Wege führen zum Ziel!


Viele Grüße und einen schönen Abend
Hans
Dateianhänge
hans.png
hans.png (16.74 KiB) 3754 mal betrachtet
balu.png
balu.png (21.12 KiB) 3754 mal betrachtet

balu
Beiträge: 370
Registriert: Mi 1. Jun 2011, 16:21

Re: [Gelöst] Bedingte Formatierung per Makro setzen.

Beitrag von balu » Fr 29. Nov 2019, 23:47

Na'bend Hans,
Jetzt mit zwei Bildern begleitet, genau das umkringelte meinte ich. Vielleicht habe ich mich auch immer nicht deutlich genug ausgedrückt.
Yep, war nicht eindeutig. Denn dort steht nichts von Regeln.
Aber das ist genau das Fenster was ich hiermit meinte.
balu hat geschrieben: Ich weiss wohl das in meiner 5er Version es in der Bed.For. so etwas wie eine Übersicht aller Formatierungen gibt ...
Können wir also Ad-akta legen.

aus Excels VBA
Ah da schau her, Frau Stachelbär!
Jetzt wird mir so einiges klarer ;-)
Dieses Marko arbeitet also für MICH. Würde man dies händisch machen, oh Gott. :lol:
Jetzt nur noch "Klick" und fertig. :mrgreen:
:lol: Hast ja Recht.

Danke trotzdem für alles
Gern geschehn.

schon durch deinen ersten Post konntest du mir eine Lösung aufgezeigen, welches ich umsetzen konnte und jetzt perfekt arbeitet.
Wie war das noch mal?
Danke aber für deinen Denkanstoss.
Ich hatte dir nur nen Schupps gegeben, das Laufen hast Du selber übernommen :-)
Aber ist schon klar was Du meintest.

Auch wenn viele Wege irgendwohin führen, so führt nur einer in mein Bett :mrgreen:

Auch an dich viele Grüße und ein hoffentlich schönes Wochenende :-D


balu

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten