mittels "funktion" Zellen Farbe prüfen ?

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: mittels "funktion" Zellen Farbe prüfen ?

Beitrag von Stephan »

Woran liegts?
Daran das das Thiscomponent-Objekt noch ohne den richtigen (bzw. jeglichen) Inhalt ist, zu dem Zeitpunkt wo die Funktion innerhalb der Calc-Datei aufgerufen wird. Um mögliche Fehlermeldungen zu verhindern sollte deshalb die automatische Berechnung abgeschaltet sein.

Ich bin im Moment im Unklaren ob es eine sonstige allgemeine Lösung gibt.



Gruß
Stephan
Benutzeravatar
Koala
**
Beiträge: 48
Registriert: Mi, 18.10.2006 12:58

Re: mittels "funktion" Zellen Farbe prüfen ?

Beitrag von Koala »

Stephan hat geschrieben:Ich bin im Moment im Unklaren ob es eine sonstige allgemeine Lösung gibt.
Könnte man das Thiscomponent-Objekt mit einer IF-Abfrage auf dessen vorhandensein/Inhalt prüfen und dann ansteller der Fehlermeldung lieber einen Leerstring, also "", ausgeben lassen?

Werd mich mal daran versuchen.
Sven
bst
*****
Beiträge: 222
Registriert: Mo, 18.01.2010 16:14
Wohnort: Ilsfeld

Re: mittels "funktion" Zellen Farbe prüfen ?

Beitrag von bst »

Auch Hallo,

mit einem M.E. 'unschönen Trick' scheint das zu funktionieren.

Weise das Makro Workbook_Open via Extras - Anpassen (!) - Ereignisse dem Ereignis Dokument Öffnen zu. Ggf. musst Du noch auf mehreren Tabellen Suchen & Ersetzen.

cu, Bernd
--

Code: Alles auswählen

REM  *****  BASIC  *****

Function FARBFUNKTION(Zelle As String)
	on error goto ErrHandler 
	x1 = Thiscomponent.CurrentController.ActiveSheet
	FARBFUNKTION = Hex(x1.getCellRangeByName(Zelle).CellBackColor)
	exit function

ErrHandler:
	FARBFUNKTION = "#N/A"	
End Function

Sub Workbook_Open()
	Dim Sheet As Object
	Dim ReplaceDescriptor As Object

	'Print "1"	
	Sheet = Thiscomponent.CurrentController.ActiveSheet
	
	ReplaceDescriptor = Sheet.createReplaceDescriptor()
	ReplaceDescriptor.SearchString = "="
	ReplaceDescriptor.ReplaceString = "="
	
	'Print "2"	
   	Sheet.ReplaceAll(ReplaceDescriptor) 
	'Print "3"	
End Sub
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: mittels "funktion" Zellen Farbe prüfen ?

Beitrag von Stephan »

Könnte man das Thiscomponent-Objekt mit einer IF-Abfrage auf dessen vorhandensein/Inhalt prüfen und dann ansteller der Fehlermeldung lieber einen Leerstring, also "", ausgeben lassen?
Im Grundsatz so wie es Bernd beschreibt.


Gruß
Stephan


Anmerkung:
Ich schrieb nicht ohne Grund:
Ich bin im Moment im Unklaren ob es eine sonstige allgemeine Lösung gibt.
denn mir ist irgendwie so als gäbe es für das hier in Debatte stehende Problem eine Lösung (jenseits der Möglichkeit den Fehler abzufangen). Ich glaube irgendwie mich zu erinnern eine Lösung dafür schon einmal irgendwo gelesen (oder gar selbst entworfen) zu haben, ich komme nur momentan absolut nicht drauf. Aber vielleicht täusche ich mich auch nur und meine Erinnerung trügt mich.
Benutzeravatar
Koala
**
Beiträge: 48
Registriert: Mi, 18.10.2006 12:58

Re: mittels "funktion" Zellen Farbe prüfen ?

Beitrag von Koala »

bst hat geschrieben:mit einem M.E. 'unschönen Trick' scheint das zu funktionieren.
Jap, funktioniert wunderbar. Besten Dank.
bst hat geschrieben:Weise das Makro Workbook_Open via Extras - Anpassen (!) - Ereignisse dem Ereignis Dokument Öffnen zu. Ggf. musst Du noch auf mehreren Tabellen Suchen & Ersetzen.
Nur der Vollständigkeit halber: <klugscheinssermodus>man kann auch über Macros verwalten - Zuordnen gehen</klugscheinssermodus> :)


Noch eine Verständnisfrage zu Workbook_Open.
Die Funktion ersetzt alle '=' im aktiven Blatt oder nur innerhalb einer Funktion einer Zelle?
Und das bewirkt dadurch das ausführen weiterer Makros (hier dann die Farbfunktion)?
Ich überlege gerade, wenn das so ist, könnte man "Unbedinge Neuberechnung" [Strg+Shift+F9] nicht auch direkt (per Funktion) aufrufen ohne den Umweg über Ersetzungen zu gehen?
Sven
bst
*****
Beiträge: 222
Registriert: Mo, 18.01.2010 16:14
Wohnort: Ilsfeld

Re: mittels "funktion" Zellen Farbe prüfen ?

Beitrag von bst »

Hi,
Nur der Vollständigkeit halber: <klugscheinssermodus>man kann auch über Macros verwalten - Zuordnen gehen</klugscheinssermodus>
Hier mit OOo 3.2.1 geht das nicht, da sind 'bei diesem Weg' nur 'globale Makros' wählbar, nicht die Makros der aktuellen Datei.
Die Funktion ersetzt alle '=' im aktiven Blatt
Ja.
Und das bewirkt dadurch das ausführen weiterer Makros (hier dann die Farbfunktion)?
Ja, das bewirkt indirekt eine Neuberechnung aller Formeln.
Ich überlege gerade, wenn das so ist, könnte man "Unbedinge Neuberechnung" [Strg+Shift+F9] nicht auch direkt (per Funktion) aufrufen ohne den Umweg über Ersetzungen zu gehen?
Möglich. F9 hat hier denn nicht funktioniert, Strg+Shift+F9 kannte ich nicht.

cu, Bernd
Benutzeravatar
Koala
**
Beiträge: 48
Registriert: Mi, 18.10.2006 12:58

Re: mittels "funktion" Zellen Farbe prüfen ?

Beitrag von Koala »

bst hat geschrieben:Hier mit OOo 3.2.1 geht das nicht, da sind 'bei diesem Weg' nur 'globale Makros' wählbar, nicht die Makros der aktuellen Datei.
Oh, tatsächlich! Das ist mir gar nicht aufgefallen.
bst hat geschrieben:Ja, das bewirkt indirekt eine Neuberechnung aller Formeln.
Habe dafür eine einfachere Lösung gefunden. Workbook_Open sieht bei mir nun so aus:

Code: Alles auswählen

Sub Workbook_Open()
	If Thiscomponent.SupportsService("com.sun.star.sheet.SpreadsheetDocument") Then
		Thiscomponent.calculateAll
	End If
End Sub
Leider bleibt es dabei, dass man diese Funktion beim öffnen des Dokumentes mit starten muss.

Jetzt frage ich mich, da ich das als globales Macro bei mir abgelegt habe, ob man OOo so anpassen kann, dass generell diese Funktion bei jeder Datei aufgerufen wird. Mir fällt momentan kein Grund ein, wieso man das nicht machen können sollte.
Sven
Antworten