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...
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
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
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
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...!
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.
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...
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?
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...
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.