Seite 1 von 1

[gelöst] Bild bei bestimmtem Wert ein- oder ausblenden

Verfasst: Fr 15. Jan 2021, 14:00
von Oscar B
Hallo!
Ich erstelle mir zur Zeit Tabelle bei Libreoffice Calc.
Nun versuche ich, dass bei einem bestimmten Wert in I8 eine Grafik darunter eingeblendet werden soll.
Steht also in I8 "Keine Aufgabe" soll die Grafik sichtbar sein, steht dort etwas anderes, soll sie unsichtbar sein. Das ganze soll passieren, ohne, dass ich noch z.B auf einen Knopf drücken muss, sondern rein durch Änderung des Wertes.

Ich vermute dies geht nur mit Hilfe eines Makros, wenn es anders geht, wäre auch schön.

Ich habe zwar ein wenig Kenntnis mit Programmierung, jedoch nicht mit Libreoffice Basic und Makros, wäre also ganz froh über anfängerfreundlicher Erklärung :lol:

Vielen Dank im Voraus

Re: Bild bei bestimmtem Wert ein- oder ausblenden

Verfasst: Fr 15. Jan 2021, 15:19
von craig
Hallo Oscar,

hier eine Beispieldatei mit Makro:
Grafik sichtbar_unsichtbar.ods
(72.37 KiB) 231-mal heruntergeladen
Weitere Beschreibungen in Tabellenblatt "Tabelle1" und Kommentare im Makrocode.

Re: Bild bei bestimmtem Wert ein- oder ausblenden

Verfasst: Fr 15. Jan 2021, 15:51
von Oscar B
craig hat geschrieben:
Fr 15. Jan 2021, 15:19
Hallo Oscar,

hier eine Beispieldatei mit Makro:
Grafik sichtbar_unsichtbar.ods
Weitere Beschreibungen in Tabellenblatt "Tabelle1" und Kommentare im Makrocode.
Vielen vielen Dank für die schnelle Antwort!!!
Ich habe das Makro nun auch bei meiner Tabelle hinzugefügt!
Ich musste mich erstmal ein bisschen reinfuchsen, aber jetzt läuft es genau wie ich wollte!
Deine Anleitungen und Anmerkungen waren super!!!
Wirklich tausend Dank :D

Re: Bild bei bestimmtem Wert ein- oder ausblenden

Verfasst: Fr 15. Jan 2021, 20:23
von Oscar B
Guten Abend,
ich habe doch noch eine Frage, bzw. ein Problem.

In der Zeile, in der die Grafik referenziert wird benutzt du:

Code: Alles auswählen

oDP=thisComponent.Drawpages(0).getByIndex(0)
Das funktioniert auch, wird aber bei mehreren Bilder etwas unübersichtlich.
Du hast aber daruntergeschrieben, dass auch folgendes geht:

Code: Alles auswählen

oDP=thisComponent.Drawpages(0).getByName("MeinBild 1")
Jetzt bekomme ich allerdings die Fehlermeldung:
"BASIC-Laufzeitfehler.
Eigenschaft oder Methode nicht gefunden: getByName."

Weiß jemand woran das liegt, bzw. wie man es behebt?
Vielen Dank

Re: Bild bei bestimmtem Wert ein- oder ausblenden

Verfasst: Fr 15. Jan 2021, 22:03
von craig
Hallo Oscar,

ich bitte um Verzeihung. Da war ich wohl schlampig, weil nicht getestet. :oops:

Ich habe nun eine Schleife eingebaut, welche alle Bildnamen
durchläuft und bei einem Treffer das Bild ein-/ausblendet.

Ich weiß nicht wie Deine Originaldatei und Deine weiteres Vorhaben aussieht,
deshalb weiß ich nicht ob eine Fehlerroutine eingebaut werden muss, für den Fall,
dass der Bildname nicht vorhanden ist.
z.B. so etwas:
Exception Handling

Hier die neue Variante ohne Errorhandling:
Grafik sichtbar_unsichtbar v2.ods
(73.41 KiB) 202-mal heruntergeladen

Re: Bild bei bestimmtem Wert ein- oder ausblenden

Verfasst: Fr 15. Jan 2021, 22:42
von Oscar B
Erstmal wieder vielen Dank!!!
Bis jetzt ist die neue Version wirklich super und funktioniert! Morgen werde ich sie dann nochmal genauer testen.
Ein Errorhandling brauche ich nicht!
Gute Nacht! :lol: :D

Re: Bild bei bestimmtem Wert ein- oder ausblenden

Verfasst: Sa 16. Jan 2021, 09:43
von F3K Total
Moin,
ich hätte da noch einen Vorschlag
Mit folgendem, zugegebenermaßen nicht so gut kommentiertem Makro, lese ich den Namen der auslösenden Zelle (event.AbsoluteName) ein, und vergleiche ihn mit dem händisch eingegeben Namen einer Grafik.
Oder anders, wenn ich die Grafik so benenne wie die auslösende Zelle heißt, kann ich sehr leicht viele verschiedene Grafiken, vielen auslösenden Zellen zuordnen.
AB.png
AB.png (112.35 KiB) 2373 mal betrachtet
Hier erstmal im Zellbereich G8 bis G20.

Code: Alles auswählen

Sub show_hide(event)
    osheet = thiscomponent.sheets.getbyname("Tabelle1")
    oRange = osheet.getcellrangebyname("G8:G20")
    if oRange.queryIntersection(event.RangeAddress).count = 1 then
        oDrawPage = osheet.Drawpage
        for i = 0 to oDrawPage.count - 1
            oShape = oDrawPage(i)
            if oShape.Name = event.AbsoluteName then
                if event.Value = 1 then
                    oShape.Visible = true
                else
                    oShape.Visible = false
                endif
            endif
        next i
    endif
end sub
Auf Craigs Datei basierendes Beispiel anbei.

Gruß R