Frage zum Übersetzten

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

Moderator: Moderatoren

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

Frage zum Übersetzten

Beitrag von Andre01 »

Hallo
ich versuche gerade ein makro aus einer Excel tabelle zu übersetzen. Leidr Funktioniert das nicht so wie ich will.
Mit Range kann OOO wohl nicht wirklich was anfangen. Kann mir jemand dabei helfen.
Ich habe das mal versucht soweit wie möglich 1 zu 1 zu übersetzen...

Code aus Excel

Code: Alles auswählen

Function FARBEZÄHLEN(Bereich As Range, Farbe As Byte) As Long
Application.Volatile
Dim c As Range
  For Each c In Bereich
    If c.Interior.ColorIndex = Farbe Then
      FARBEZÄHLEN = FARBEZÄHLEN + 1
    End If
  Next c
End Function


OOO code aus Calc

Code: Alles auswählen

Sub FARBEZAEHLEN(Bereich As Range, Farbe As Byte) As Long   
	oCalc = thisComponent
	oSheet = oCalc.sheets(0) 'erstes Tabellenblatt
  
Dim c As Range
  For Each c In Bereich
    If oCell.Cellbackcolor = Farbe Then
      FARBEZAEHLEN = FARBEZAEHLEN + 1
    End If
  Next c
End Sub
danke und Gruß
André
turtle47
*******
Beiträge: 1849
Registriert: Mi, 04.01.2006 20:10
Wohnort: Rheinbach

Re: Frage zum Übersetzten

Beitrag von turtle47 »

Hallo André,
Andre01 hat geschrieben:Mit Range kann OOO wohl nicht wirklich was anfangen.
Wieso nicht?
Andre01 hat geschrieben:Kann mir jemand dabei helfen.
Ich will's mal versuchen.

Wenn Du über Menue > Einfügen > Namen > Festlegen einem Zellbereich einen Namen "Bereich" vergeben hast funktioniert folgender Code:

Code: Alles auswählen

Sub Farben_zaehlen1
	oDoc = thisComponent
	oSheet = oDoc.sheets(0)
	oCellRange = osheet.getCellRangeByName("Bereich") 'Bereich der überprüft wird
	iErsteSpalte = oCellRange.rangeAddress.startColumn
	iErsteZeile = oCellRange.rangeAddress.startRow
	iLetzteSpalte = oCellRange.rangeAddress.EndColumn
	iLetzteZeile = oCellRange.rangeAddress.EndRow
	For i = 0 to iLetzteZeile
	For m = 0 to iLetzteSpalte
	oCell=oCellRange.getCellByPosition(m,i)
	if oCell.Cellbackcolor <> -1 Then
	x = x + 1
	end if	
	next m
	next i
	msgbox "Anzahl farbiger Zellen = " & x
End Sub
Ansonsten geht auch das:

Code: Alles auswählen

Sub Farben_zaehlen2
	oDoc = thisComponent
	oSheet = oDoc.sheets(0)
	oCellRange = osheet.getCellRangeByName("A1:B10")'Bereich der überprüft wird
	iErsteSpalte = oCellRange.rangeAddress.startColumn
	iErsteZeile = oCellRange.rangeAddress.startRow
	iLetzteSpalte = oCellRange.rangeAddress.EndColumn
	iLetzteZeile = oCellRange.rangeAddress.EndRow
	For i = 0 to iLetzteZeile
	For m = 0 to iLetzteSpalte
	oCell=oCellRange.getCellByPosition(m,i)
	if oCell.Cellbackcolor <> -1 Then
	x = x + 1
	end if	
	next m
	next i
	msgbox "Anzahl farbiger Zellen = " & x
End Sub
Hilft das weiter?

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: Frage zum Übersetzten

Beitrag von Andre01 »

Hallo Jürgen
Es hilft mir im Prinzip schon etwas weiter. etwas zu mindest
In Excel war es so da habe ich ich das makro aufgerufen
=farbezählen(A3:BH33;3)
das erste ist der Anfangsbreich, Endbreich, und das dritte ist die Farbe die gezählt werden soll.

Damit ist es halt eine "allgemeine Funktion" die ich aus jeder Zelle ausrufen kann.

Hintergrund ist halt das es sich um einen Breitschaftplan handelt und mit der Funktion sollen die farblich Markierten Tage ( bereitschaft, urlaub usw. ) gezählt werden.
In deinem Makro ist es eine Box die ja aufgeht, Ich brauche das in einem Feld.

Gruß André
hawe
****
Beiträge: 151
Registriert: Di, 05.08.2008 19:47

Re: Frage zum Übersetzten

Beitrag von hawe »

Der ANsatz in XL mit Volatail ist ein Krücke und verbietet sich bei einer sauberen Programmierung.

Grundsätzlich wäre zu fragen, wieso man eigentlich Farben zählen will?
Richtig angefasst wäre eine Bedingung in der Tabelle zu hinterlegen und eine Bedingte Formatierung zur Farbanzeige anzuwenden.
Dann hätte man die Bedingung entsprechend auszuwerten.
ODER
man arbeitet Ereignisgesteuert.
Nutzt das Change-Ereignis in XL bzw. einen Modify-Listener in Calc und wertet damit die Farbinformation in dem fraglichen Zellenbereich aus...
Gruss HW
Win7/SuSe 11.2 - LO 3.3
Andre01
*
Beiträge: 16
Registriert: Do, 23.10.2008 13:03

Re: Frage zum Übersetzten

Beitrag von Andre01 »

Hallo Hawe,
also das mit den Farben hat den Hintergrund das sich sowas in einer Übersicht besser an sehen läßt.
Die Funktion farben_zählen die ich in meiner Antwort beigefügt habe ist aus Excel und Funktioniert.
Ich habe leider nicht so ganz verstanden was du meinst Hawe.
Denke was Du mir sagen wolltest ist das das übersetzten nicht funktioniert bzw. das OOO das nicht kann?

Gruß André
hawe
****
Beiträge: 151
Registriert: Di, 05.08.2008 19:47

Re: Frage zum Übersetzten

Beitrag von hawe »

oo Kann das schon....
Nur nicht mit dem Ansatz aus Excel.

Vereinfachen würde sich das Problem, die Farbeinstellung per Bedingter Formatierung zu machen. Dazu wäre eine abfragbare Bedingung im Tabellenblatt notwendig - gibt es die oder kann man die konstruieren.
Oder man macht eine Ereignislösung, einen Modify-Listener, der Veränderungen der Zelle erkennt und darauf reagiert...
Andre01
*
Beiträge: 16
Registriert: Do, 23.10.2008 13:03

Re: Frage zum Übersetzten

Beitrag von Andre01 »

Hallo
sorry war mit anderen Sachen beschäftigt und habe das Problem etwas vor mir her geschoben.

von den Sachen von denen Du gerade sprichst Hawe habe ich leider überhaupt keine Ahnung. Ich war froh das ich das Problem mit hilfe in Excel gelöst bekommen habe.
Also die sache mit der Ereignislösung hört sich für mich schon ganz gut an. Aber die frage kommt bei der Praxis ausführung.

gruß André
Antworten