[gelöst] Kann Grafik aus Zelle nicht per Makro löschen
Moderator: Moderatoren
-
- *
- Beiträge: 17
- Registriert: Di, 05.12.2006 22:26
- Wohnort: Schiffdorf
[gelöst] Kann Grafik aus Zelle nicht per Makro löschen
Hallo allerseits,
ich habe nach langer Zeit 'mal wieder meine Druckvorlage für Ordner-Etiketten benutzt, und festgestellt, dass diese
nicht mehr richtig funktioniert; Die Grafik wird beim Abwählen per Checkbox nicht mehr aus der Zelle entfernt.
Zur Erklärung sei noch erwähnt, dass das Makro vor Jahren mit der Version 2.4 erstellt wurde.
Wenn man die Checkbox anwählt, wird in der Zelle darunter ein Logo eingefügt, und drei waagerechte Rahmenlinien
werden aktiviert.
Mir ist auch noch nicht ganz klar, warum ich die Grafik über die DrawPage einfüge und das Entfernen über die Flags
der Methode ClearContent geschieht, zumindest hat es so schon funktioniert.
Kann mir jemand einen Tipp geben, wie man eine Grafik anspricht, die man über die DrawPage eingefügt hat?
Bitte um Vorschläge.
Gruß,
Matthias
ich habe nach langer Zeit 'mal wieder meine Druckvorlage für Ordner-Etiketten benutzt, und festgestellt, dass diese
nicht mehr richtig funktioniert; Die Grafik wird beim Abwählen per Checkbox nicht mehr aus der Zelle entfernt.
Zur Erklärung sei noch erwähnt, dass das Makro vor Jahren mit der Version 2.4 erstellt wurde.
Wenn man die Checkbox anwählt, wird in der Zelle darunter ein Logo eingefügt, und drei waagerechte Rahmenlinien
werden aktiviert.
Mir ist auch noch nicht ganz klar, warum ich die Grafik über die DrawPage einfüge und das Entfernen über die Flags
der Methode ClearContent geschieht, zumindest hat es so schon funktioniert.
Kann mir jemand einen Tipp geben, wie man eine Grafik anspricht, die man über die DrawPage eingefügt hat?
Bitte um Vorschläge.
Gruß,
Matthias
- Dateianhänge
-
- OrdnerRücken-4761.ots
- Druckvorlage für Ordner-Etiketten
- (14.94 KiB) 48-mal heruntergeladen
Zuletzt geändert von LeverAction am Do, 29.03.2012 09:41, insgesamt 1-mal geändert.
Re: Kann Grafik aus Zelle nicht per Makro löschen
Hallo,
bei mir funktioniert Dein Makro.
Haken drin, Grafik einfügen, Haken raus, Grafik weg.
Natürlich nur, wenn sich hinter dem Link: file:///G:/Grafiken/Logo.jpg auch eine Datei verbirgt.
Gruß R
Edit: Du hast 4x das nahezu gleiche Marko in 4 Modulen gehabt, anbei das Makro etwas kompakter (1x für alle 4 Checkboxen)
bei mir funktioniert Dein Makro.
Haken drin, Grafik einfügen, Haken raus, Grafik weg.
Natürlich nur, wenn sich hinter dem Link: file:///G:/Grafiken/Logo.jpg auch eine Datei verbirgt.
Gruß R
Edit: Du hast 4x das nahezu gleiche Marko in 4 Modulen gehabt, anbei das Makro etwas kompakter (1x für alle 4 Checkboxen)
- Dateianhänge
-
- OrdnerRücken-4761.ots
- (11.26 KiB) 50-mal heruntergeladen
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO
-
- *
- Beiträge: 17
- Registriert: Di, 05.12.2006 22:26
- Wohnort: Schiffdorf
Re: Kann Grafik aus Zelle nicht per Makro löschen
Hallo R,
zunächst einmal vielen Dank für die reduzierte Version.
Sie funktioniert bei mir aber leider genauso wenig wie meine.
Natürlich liegt meine Grafik am richtigen Ort, bzw. der Pfad ist entsprechend angepasst.
Einfügen kann ich sie ja auch, aber sie bleibt in der Zelle, wenn ich den Haken rausnehme.
Was sich inzwischen geändert hat ist das Betriebssystem (Win 7 statt Win XP) und die OpenOffice Version.
Hat vielleicht noch Jemand eine Idee?
Gruß,
Matthias
zunächst einmal vielen Dank für die reduzierte Version.
Sie funktioniert bei mir aber leider genauso wenig wie meine.
Natürlich liegt meine Grafik am richtigen Ort, bzw. der Pfad ist entsprechend angepasst.
Einfügen kann ich sie ja auch, aber sie bleibt in der Zelle, wenn ich den Haken rausnehme.
Was sich inzwischen geändert hat ist das Betriebssystem (Win 7 statt Win XP) und die OpenOffice Version.
Hat vielleicht noch Jemand eine Idee?
Gruß,
Matthias
-
- *
- Beiträge: 17
- Registriert: Di, 05.12.2006 22:26
- Wohnort: Schiffdorf
Re: Kann Grafik aus Zelle nicht per Makro löschen
Hallo Waldschrat,
an den "Basics" liegt es nicht, glaube mir. Trotzdem vielen Dank für deine Unterstützung.
Es war ja auch nur eine Vermutung von mir, dass es an den "Veränderungen" liegen könnte.
Vielleicht kann man ja auch das Entfernen der Grafik anders umsetzen, z.B. wieder über die DrawPage die Grafik ansprechen?
Oder das Ein- und Ausblenden ganz anders realisieren, z.B. einfach nur die Größe der Grafik ändern, sprich Size.Widht=0 und Size.Height=0 oder die gewünschte Größe.
Bitte um gute Ratschläge.
Gruß,
Matthias
an den "Basics" liegt es nicht, glaube mir. Trotzdem vielen Dank für deine Unterstützung.
Es war ja auch nur eine Vermutung von mir, dass es an den "Veränderungen" liegen könnte.
Vielleicht kann man ja auch das Entfernen der Grafik anders umsetzen, z.B. wieder über die DrawPage die Grafik ansprechen?
Oder das Ein- und Ausblenden ganz anders realisieren, z.B. einfach nur die Größe der Grafik ändern, sprich Size.Widht=0 und Size.Height=0 oder die gewünschte Größe.
Bitte um gute Ratschläge.
Gruß,
Matthias
Re: Kann Grafik aus Zelle nicht per Makro löschen
Genau, einfach Ein- oder Ausblenden.LeverAction hat geschrieben:... Ein- und Ausblenden ...
Dazu das Logo 4 mal einfügen, und dem jeweiligen Logo über das Kontextmenü diese Namen geben:
LogoA
LogoC
LogoE
LogoG
Dann geht dieses Makro:
Code: Alles auswählen
sub S_Logo(Event)
rem ----------------------------------------------------------------------
rem Variablen definieren
dim oDoc as object
dim oBlatt as Object
dim oForm as Object
dim iState as Integer
dim Grafik as Object
dim Page as Object
dim myImage as String
dim oZelle1 as Object
dim oZelle2 as Object
dim oSel as Object
dim oRanges as Object
dim oLinie as new com.sun.star.table.BorderLine
dim oRahmen1 as new com.sun.star.table.TableBorder
dim oRahmen2 as new com.sun.star.table.TableBorder
rem ----------------------------------------------------------------------
rem Prüfen ob das Macro in einem Calc-Dokument ausgeführt wird
If NOT ThisComponent.supportsService("com.sun.star.sheet.SpreadsheetDocument") then
MsgBox "Dieses Makro funktioniert nur mit einen OpenOffice.org-Calc", 48, "Fehler"
Exit Sub
End if
rem ----------------------------------------------------------------------
rem Checkbox abfragen und Aktionen ausführen
ochkbox = event.source.model
S = ochkbox.tag 'Zusatzinformation der Checkbox auslesen
oDoc = ThisComponent
oBlatt = oDoc.Sheets(0)
oZelle1 = oBlatt.getCellRangeByName(S+"2")
oZelle2 = oBlatt.getCellRangeByName(S+"4")
iState = ochkbox.state
Page = oBlatt.drawPage
for i = 0 to Page.count-1
oShape = Page(i)
if oShape.name = "Logo"+S then exit for
next
if iState = 1 then
'Grafik in Zelle einblenden
oShape.Visible = true
'Horizontale Rahmenlinien aktivieren
oLinie.Color = rgb(0, 0, 0)
oLinie.outerLineWidth = 25
With oRahmen1
.TopLine = oLinie
.isTopLineValid = True
.BottomLine = oLinie
.isBottomLineValid = True
End with
With oRahmen2
.BottomLine = oLinie
.isBottomLineValid = True
End with
elseif iState = 0 then
'Rahmenlinien entfernen
With oRahmen1
.TopLine = oLinie
.isTopLineValid = 1
.BottomLine = oLinie
.isBottomLineValid = 1
End with
With oRahmen2
.BottomLine = oLinie
.isBottomLineValid = 1
End with
'Logo ausblenden
oShape.Visible = false
end if
oZelle1.TableBorder = oRahmen1
oZelle2.TableBorder = oRahmen2
'Cursor zur Texteingabe auf Zelle setzen
oSel = oDoc.CurrentController
oSel.Select(oZelle2)
oRanges = oDoc.createInstance("com.sun.star.sheet.SheetCellRanges")
oSel.Select(oRanges)
oFrame = ThisComponent.CurrentController.Frame
oFrame.ContainerWindow.setFocus
end sub
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO
-
- *
- Beiträge: 17
- Registriert: Di, 05.12.2006 22:26
- Wohnort: Schiffdorf
Re: Kann Grafik aus Zelle nicht per Makro löschen
Hallo R,
vielen Dank für den Vorschlag, ich habe allerdings momentan wenig Zeit mich damit intensiv zu beschäftigen.
Ein erster schneller Test ist fehlgeschlagen. In der Einzelschrittausführung tritt der Fehler bei der Zeile
"ockbox = event.source.model" auf. Basic-Laufzeitfehler: Argument ist nicht optional.
Muß mich erst einmal schlau lesen, wie man mit dem event.source.model arbeitet.
Gruß,
Matthias
vielen Dank für den Vorschlag, ich habe allerdings momentan wenig Zeit mich damit intensiv zu beschäftigen.
Ein erster schneller Test ist fehlgeschlagen. In der Einzelschrittausführung tritt der Fehler bei der Zeile
"ockbox = event.source.model" auf. Basic-Laufzeitfehler: Argument ist nicht optional.
Muß mich erst einmal schlau lesen, wie man mit dem event.source.model arbeitet.
Gruß,
Matthias
Re: Kann Grafik aus Zelle nicht per Makro löschen
Hallo,
der Fehler weist darauf hin, dass Du das Makro nicht an die Checkbox gehängt und von dort gestartet hast, sondern es über Extras/Makros ... ausgeführt hast.
Da das Makro die Quelle seines eigenen Aufrufs (event.source) benötigt, kann es auf diese Art nicht funktionieren.
Gruß R
der Fehler weist darauf hin, dass Du das Makro nicht an die Checkbox gehängt und von dort gestartet hast, sondern es über Extras/Makros ... ausgeführt hast.
Da das Makro die Quelle seines eigenen Aufrufs (event.source) benötigt, kann es auf diese Art nicht funktionieren.
Gruß R
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO
-
- *
- Beiträge: 17
- Registriert: Di, 05.12.2006 22:26
- Wohnort: Schiffdorf
Re: Kann Grafik aus Zelle nicht per Makro löschen
Hallo R,
ich hatte das Makro schon an die Checkbox gehängt, ich glaube bei Statusänderung wird es aufgerufen.
Mir wird die ganze Fehlersuche aber nun zu zeitraubend, inzwischen habe ich eine ganze Reihe von Dokumenten aus unterschiedlichsten Quellen eingesammelt.
Überwiegend beschäftigen sich die Beiträge/Dokumente immer nur mit dem Einfügen von Grafiken, und nicht mit dem Entfernen. Das scheint in Calc nicht so einfach zu sein.
Auch mit dem Handling von eingefügten Grafiken muß ich mich intensiver beschäftigen, z.B. warum ich eine Grafik, die ich über Page.add(...) eingefügt habe, nicht auch wieder mit Page.remove(...) entfernen kann.
Auch das Ein- oder Ausblenden hat nicht funktioniert, Eigenschaft "Visible" war nicht bekannt.
Das sind noch zuviele Baustellen für mich.
Vielen Dank noch einmal für deine Unterstützung, vielleicht kann ich sie im kommenden Herbst/Winter wieder gebrauchen
Gruß,
Matthias
ich hatte das Makro schon an die Checkbox gehängt, ich glaube bei Statusänderung wird es aufgerufen.
Mir wird die ganze Fehlersuche aber nun zu zeitraubend, inzwischen habe ich eine ganze Reihe von Dokumenten aus unterschiedlichsten Quellen eingesammelt.
Überwiegend beschäftigen sich die Beiträge/Dokumente immer nur mit dem Einfügen von Grafiken, und nicht mit dem Entfernen. Das scheint in Calc nicht so einfach zu sein.
Auch mit dem Handling von eingefügten Grafiken muß ich mich intensiver beschäftigen, z.B. warum ich eine Grafik, die ich über Page.add(...) eingefügt habe, nicht auch wieder mit Page.remove(...) entfernen kann.
Auch das Ein- oder Ausblenden hat nicht funktioniert, Eigenschaft "Visible" war nicht bekannt.
Das sind noch zuviele Baustellen für mich.
Vielen Dank noch einmal für deine Unterstützung, vielleicht kann ich sie im kommenden Herbst/Winter wieder gebrauchen

Gruß,
Matthias
Re: Kann Grafik aus Zelle nicht per Makro löschen
Hallo
anfang des Jahres stand ich vor dem gleichem Problem: Grafiken löschen. Ich habe da wohl auch eine Methode gefunden sie zu löschen, die aber nicht ganz ungefährlich ist.
Die Methode sieht wie folgt aus.
Dadurch werden alle Zeichenobjekte im Zellbereich B1:F200 gelöscht, praktisch theoretisch.
Die Probleme dabei sind folgende.
Wenn sich in der Spalte B (Zelle B1) eine Grafik befindet, so MUSS die X-Position der Grafik auch wirklich in der Spalte B beginnen.
Beispiel:
Spalte A ist 2,58 cm breit. Position X der Grafik mus mindestens 2,58 sein.
Warum betone ich das?
Weil eine Grafik so rein Optisch sich wohl in der Spalte B befindet, aber die Fläche kann eventuell schon in der Spalte A bei Position 2,57 anfangen -{kommt auf die Grafik drauf an}-. Und dadurch wird ja die Grafik nicht der Spalte B, sondern A zugeordnet. Folglich wird sie beim löschen nicht erfasst, und auch nicht gelöscht.
Okay, ich denk mir das kann man noch so einigermaßen verstehen und auch nachvollziehen. Aber richtig verwirrend wird es erst jetzt.
Angenommen in den Zellen A1 bis F1 sind Grafiken die bis in die Zeile 3 hineinragen, und diese will man nun mit .clearContents löschen. So reicht es nicht aus einfach zu sagen:.getCellRangeByName("B1:F1").clearContents(128). Das Ergebnis ist nämlich; es werden keine Grafiken gelöscht!
Warum ist das so?
Keine Ahnung!
Denn Sinn versteh ich auch nicht, aber die Ursache dafür habe ich herausgefunden.
Vielleicht habt ihr das schon mal gesehen, und euch nichts dabei gedacht. Es kann schon mal vorkommen wenn eine Datei mit Grafiken geöffnet/geladen wird, dann sieht man unter Umständen ganz kurz anstelle der Grafiken einen Platzhalter und Senkrecht darunter einen Text. Und wenn die Datei fertig geöffnet/geladen ist, dann sieht man nur noch die Grafik.
Hier mal ein Screenshot was ich meine. Und die Länge dieses Textes, genauer gesagt die Pfadangabe, muss nun berücksichtigt werden. In diesem Falle bedeutet das, das die Code-Zeile wie folgt aussehen müsste.
Das wäre für die Endzeile ein mindestmaß (31). Besser ist es wenn es sogar erhöht wird. Und erst jetzt lassen sich die Grafiken wie gewünscht löschen.
Wie man nun aber allerdings am einfachsten und schnellsten die End-Adressierung herausbekommt, weiß ich nicht, das muss man irgendwie austesten.
Es besteht aber noch ein gewisses Gefahrenpotenzial. Denn nicht nur Grafiken, nein, auch Formulare-Steuerelemente die sich innerhalb des Adressbereichs befinden, werden Gnadenlos gelöscht.
Bitte verzeiht wenn ich jetzt meine Idee mit .clearContents nicht in die Beispieldatei(en) eingebaut habe, aber ich durchblicke momentan die Makros nicht so recht.
Jedoch ist mir grad eben noch etwas aufgefallen.Muss das so sein?
Ich würde das z.B. so schreiben.
Gruß
balu
anfang des Jahres stand ich vor dem gleichem Problem: Grafiken löschen. Ich habe da wohl auch eine Methode gefunden sie zu löschen, die aber nicht ganz ungefährlich ist.
Die Methode sieht wie folgt aus.
Code: Alles auswählen
sub GrafikenLoeschen
dim oDocGL as object
oDocGL = thisComponent
oDocGL.Sheets(0).getCellRangeByName("B1:F5").clearContents(128)
end sub
Die Probleme dabei sind folgende.
Wenn sich in der Spalte B (Zelle B1) eine Grafik befindet, so MUSS die X-Position der Grafik auch wirklich in der Spalte B beginnen.
Beispiel:
Spalte A ist 2,58 cm breit. Position X der Grafik mus mindestens 2,58 sein.
Warum betone ich das?
Weil eine Grafik so rein Optisch sich wohl in der Spalte B befindet, aber die Fläche kann eventuell schon in der Spalte A bei Position 2,57 anfangen -{kommt auf die Grafik drauf an}-. Und dadurch wird ja die Grafik nicht der Spalte B, sondern A zugeordnet. Folglich wird sie beim löschen nicht erfasst, und auch nicht gelöscht.
Okay, ich denk mir das kann man noch so einigermaßen verstehen und auch nachvollziehen. Aber richtig verwirrend wird es erst jetzt.
Angenommen in den Zellen A1 bis F1 sind Grafiken die bis in die Zeile 3 hineinragen, und diese will man nun mit .clearContents löschen. So reicht es nicht aus einfach zu sagen:.getCellRangeByName("B1:F1").clearContents(128). Das Ergebnis ist nämlich; es werden keine Grafiken gelöscht!

Warum ist das so?
Keine Ahnung!
Denn Sinn versteh ich auch nicht, aber die Ursache dafür habe ich herausgefunden.
Vielleicht habt ihr das schon mal gesehen, und euch nichts dabei gedacht. Es kann schon mal vorkommen wenn eine Datei mit Grafiken geöffnet/geladen wird, dann sieht man unter Umständen ganz kurz anstelle der Grafiken einen Platzhalter und Senkrecht darunter einen Text. Und wenn die Datei fertig geöffnet/geladen ist, dann sieht man nur noch die Grafik.
Hier mal ein Screenshot was ich meine. Und die Länge dieses Textes, genauer gesagt die Pfadangabe, muss nun berücksichtigt werden. In diesem Falle bedeutet das, das die Code-Zeile wie folgt aussehen müsste.
Code: Alles auswählen
sub GrafikenLoeschen
dim oDocGL as object
oDocGL = thisComponent
oDocGL.Sheets(0).getCellRangeByName("B1:F31").clearContents(128)
end sub
Wie man nun aber allerdings am einfachsten und schnellsten die End-Adressierung herausbekommt, weiß ich nicht, das muss man irgendwie austesten.
Es besteht aber noch ein gewisses Gefahrenpotenzial. Denn nicht nur Grafiken, nein, auch Formulare-Steuerelemente die sich innerhalb des Adressbereichs befinden, werden Gnadenlos gelöscht.
Bitte verzeiht wenn ich jetzt meine Idee mit .clearContents nicht in die Beispieldatei(en) eingebaut habe, aber ich durchblicke momentan die Makros nicht so recht.
Jedoch ist mir grad eben noch etwas aufgefallen.
Code: Alles auswählen
oZelle1 = oBlatt.getCellRangeByName(S+"2")
oZelle2 = oBlatt.getCellRangeByName(S+"4")
Ich würde das z.B. so schreiben.
Code: Alles auswählen
oZelle1 = oBlatt.getCellRangeByName(S&2)
oZelle2 = oBlatt.getCellRangeByName(S&4)
Gruß
balu
- Dateianhänge
-
- grafiken_löschen_1.ods
- (18.08 KiB) 90-mal heruntergeladen
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.
wehr rächtschraipfähler findet khan si behalden
wehr rächtschraipfähler findet khan si behalden

-
- *
- Beiträge: 17
- Registriert: Di, 05.12.2006 22:26
- Wohnort: Schiffdorf
Re: Kann Grafik aus Zelle nicht per Makro löschen
Hallo Balu,
meine Hochachtung! Das war genau der entscheidende Hinweis.
Nachdem ich den Wert für die X-Position der Grafik ein wenig erhöht hatte, funktionierte es einwandfrei.
Alternativ hätte ich auch den Löschbereich erweitern können, wie Du bereits erwähnt hast. Auch das habe ich mit Erfolg überprüft.
Ob der Code, der dir aufgefallen war, auch auf deine Art geschrieben werden kann, weiß ich auch nicht genau, der wurde von "R" beigesteuert.
Nun kann ich ja beruhigt in die "Sommerpause" gehen.
Vielen Dank noch einmal an alle Helfer, vielleicht kann ich mich ja irgendwann revanchieren.
Gruß,
Matthias
meine Hochachtung! Das war genau der entscheidende Hinweis.
Nachdem ich den Wert für die X-Position der Grafik ein wenig erhöht hatte, funktionierte es einwandfrei.
Alternativ hätte ich auch den Löschbereich erweitern können, wie Du bereits erwähnt hast. Auch das habe ich mit Erfolg überprüft.
Ob der Code, der dir aufgefallen war, auch auf deine Art geschrieben werden kann, weiß ich auch nicht genau, der wurde von "R" beigesteuert.
Nun kann ich ja beruhigt in die "Sommerpause" gehen.
Vielen Dank noch einmal an alle Helfer, vielleicht kann ich mich ja irgendwann revanchieren.
Gruß,
Matthias
Re: Kann Grafik aus Zelle nicht per Makro löschen
Hallo Balu,
Das Ergebnis von S+"2" und S&2 ist gleich: Ein String, der aus dem Inhalt des tags und einer Zahl zusammengesetzt ist.
Gruß R
Du hast je Ausdruck zwei Zeichen eingespart. Das ist eleganter.balu hat geschrieben:Jedoch ist mir grad eben noch etwas aufgefallen.Muss das so sein?Code: Alles auswählen
oZelle1 = oBlatt.getCellRangeByName(S+"2") oZelle2 = oBlatt.getCellRangeByName(S+"4")
Ich würde das z.B. so schreiben.Code: Alles auswählen
oZelle1 = oBlatt.getCellRangeByName(S&2) oZelle2 = oBlatt.getCellRangeByName(S&4)
Das Ergebnis von S+"2" und S&2 ist gleich: Ein String, der aus dem Inhalt des tags und einer Zahl zusammengesetzt ist.
Gruß R
- miniKasse MMove 1.0.6 Base Videotutorial
- Windows 11: AOO, LO Linux Mint: AOO, LO
Re: Kann Grafik aus Zelle nicht per Makro löschen
Hallo,
@Matthias
Freut mich zu hören, dass ich helfen konnte
.
@R
Also ist es reine Geschmacksache. Danke.
Gruß
balu
@Matthias
Freut mich zu hören, dass ich helfen konnte

@R
Also ist es reine Geschmacksache. Danke.
Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.
wehr rächtschraipfähler findet khan si behalden
wehr rächtschraipfähler findet khan si behalden
