Farbenzählen als Function was ist falsch?

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

Moderator: Moderatoren

Andre01
*
Beiträge: 16
Registriert: Do, 23.10.2008 13:03

Farbenzählen als Function was ist falsch?

Beitrag von Andre01 »

Hallo,
ich habe mal ne fragen zum Basic / makro.
ich habe hier ein Makro gefunden mit dem man Hintergrundfarben in einer Tabelle zählen kann. Dieses Makro wollte ich gerne als Funktion um bauen aber irgendwie kommt ich damit nicht ganz zu recht. Ich wollte die Funktion in einer Zelle aufrufen in der dann das ergebnis eingetragen wird.
Aufrufen tute ich die Function durch
=farbe_zaehlen("a3";"bh33";0;0;255)
Damit sollte doch eigentlich die Hintergrundfarbe Blau gezählt werden.
Aber passieren tut da nichts.
Habe das Gefühl das die Anfang- und die Endzelle nicht richtig übergeben wird.

Code: Alles auswählen

function farbe_zaehlen(begin,ende,R,G,B)
   oDoc = thisComponent
   oSheet = oDoc.sheets(1) 'erstes Tabellenblatt
   oStart = osheet.getCellRangeByName(begin) 'zu prüfender anfang Zellbereich
   oEnde = osheet.getCellRangeByName(ende) 'zu prüfender ende Zellbereich
   x = 0
   y = 0
   'auslesen der Eckpunkte 
   iErsteSpalte = oStart.rangeAddress.startColumn
   iErsteZeile = oStart.rangeAddress.startRow
   iLetzteSpalte = oEnde.rangeAddress.EndColumn
   iLetzteZeile = oEnde.rangeAddress.EndRow
   For i = 0 to iLetzteZeile-iErsteZeile                      'Zählschleife
   For m = 0 to iLetzteSpalte-iErsteSpalte
   ostart=oCellRange.getCellByPosition(m,i)
   'msgbox ("Zellbereich: " & (m) & (i)  & CHR (13) ) 'zum debug
   if ostart.Cellbackcolor(R,G,B) = RGB (R,G,B) then ' Farbe blau
   x = x + 1
   end if

   next m
   next i 
   
End function
Hat jemand ne Lösung?

Gruß André
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: Farbenzählen als Function was ist falsch?

Beitrag von Karolus »

Hallo
Ich hab den Rest jetzt nicht getestet, aber der "Rückgabewert" einer Function muss in der Zeile vor 'end function' an den Funktionsnamen gebunden werden:

Code: Alles auswählen

.....
farbe_zaehlen = x
end function
Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Andre01
*
Beiträge: 16
Registriert: Do, 23.10.2008 13:03

Re: Farbenzählen als Function was ist falsch?

Beitrag von Andre01 »

Ok
danke Karo für den Hinweis. Habe ich gleich mal gemacht. Aber funktionieren tut das nicht besser.
Ich bekomme immer #Name? in der Zelle mit der Funktion angezeigt.
Da scheint noch der Wurm drin zusein....


Gruß André
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Farbenzählen als Function was ist falsch?

Beitrag von turtle47 »

Hallo André,

bringt die Function keine Fehlermeldung bei Dir?
Wenn nicht, könnte es sein, dass Du die Makrosicherheit unter Menue > Extras > Optionen > OO.o > Sichherheit auf "Hoch" stehen hast?
Andre01 hat geschrieben:Da scheint noch der Wurm drin zusein....
Nicht nur einer. :shock:


Hier beschreibst Du die Variablen oStart und oEnde.
Andre01 hat geschrieben: oStart = osheet.getCellRangeByName(begin) 'zu prüfender anfang Zellbereich
oEnde = osheet.getCellRangeByName(ende) 'zu prüfender ende Zellbereich
Und hier beschreibst Du die Variable oStart neu!
Andre01 hat geschrieben:ostart=oCellRange.getCellByPosition(m,i)

Ausserdem ist
Andre01 hat geschrieben:ostart=oCellRange.getCellByPosition(m,i)
auch nicht definiert!

Hier mal ein funktionierender Code:

Code: Alles auswählen

function farbe_zaehlen(begin,ende,R,G,B)
	oDoc = thisComponent
	oSheet = oDoc.sheets(0) 'erstes Tabellenblatt
	oBereich = oSheet.getCellRangeByName(begin & ":" & ende)
	x = 0
	y = 0
	'auslesen der Eckpunkte 
	iErsteSpalte = oBereich.rangeAddress.startColumn
	iErsteZeile = oBereich.rangeAddress.startRow
	iLetzteSpalte = oBereich.rangeAddress.EndColumn
	iLetzteZeile = oBereich.rangeAddress.EndRow 
	For i = 0 to iLetzteZeile-iErsteZeile
	For m = 0 to iLetzteSpalte-iErsteSpalte
	ostart=oBereich.getCellByPosition(m,i)
	if ostart.Cellbackcolor(R,G,B) = RGB (R,G,B) then ' Farbe blau
	x = x + 1
	end if
	next m
	next i
	farbe_zaehlen = x
End function
Viel Erfolg.

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Andre01
*
Beiträge: 16
Registriert: Do, 23.10.2008 13:03

Re: Farbenzählen als Function was ist falsch?

Beitrag von Andre01 »

Danke Jürgen,
das funktioniert soweit ganz gut bekomme nicht mehr #Name? in der Zelle angezeigt.
Aber zählen tut die Funktion immer noch nicht. Ich bekomme immer von der Zählvariable (x) eine 0 zurück, bzw. den wert den ich oben bei x= eingegeben habe.
Soweit ich das beurteilen kann übergebe ich die Werte richtig in die Funktion. Aber x bleibt so wie ich sie mal mit "=" gesetzt habe und wird nicht erhöht.

Kannst Du mir das mal erklären???


Gruß Andre
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Farbenzählen als Function was ist falsch?

Beitrag von turtle47 »

Hi André,
Andre01 hat geschrieben:Kannst Du mir das mal erklären???
Entweder stimmt der RGB-Wert nicht oder Du aktualisierst nicht mit Strg+Shift+F9.

Jürgen
Software hat keinen Verstand - benutze deinen eigenen...!

Win 7 SP1/ LibreOffice 3.4.2 OOO340m1 (Build:203) / Firefox 15.0.1 / Notebook ASUS K70IO 64 Bit-Betriebssytem
Andre01
*
Beiträge: 16
Registriert: Do, 23.10.2008 13:03

Re: Farbenzählen als Function was ist falsch?

Beitrag von Andre01 »

Danke Jürgen,
habe den Wald vor lauter Bäumen nicht gesehen.... In deinem Beispiel war Sheet (0) meine Tabelle war aber auf Sheet(1)...
Jetzt geht es auch :oops:
Danke noch mal ...

Gruß André
Antworten