Seite 1 von 1

for each Schleife in calc

Verfasst: So, 10.10.2010 16:51
von monk77
Hallo, ich möchte gerne eine for-each-Schleife in calc nutzen. In Excel kam ich mit folgender Vorgehensweise (natürlich mit leichten Veränderungen der Syntax) immer zum Ziel. Ist der Befehl for each in OoBasic noch nicht implementiert? Ich las da einen veralteten Beitrag auf einer Webseite rund um Oo.

Ausgangssituation:

Die Zeilen A12:A16 enthalten Werte. Nun möchte ich rein zu Testzwecken, dass jede Zelle, welche den Wert 5 enthält, eine bestimmte Hintergrundfarbe erhält. Dazu nutze ich folgenden Code:

Code: Alles auswählen

sub schleife
dim sheet as object
sheet = thisComponent.sheets(0)

dim oRange as object

oRange = sheet.getCellRangeByName("A12:A16")
dim cell
For Each cell in oRange
if cell.value = 5 then
    cell.CellbackColor = rgb(172,255,47)
end if
next cell
end sub
Leider spuckt mir Oo immer den Hinweis aus, dass sich die Datentypen wohl nicht vertragen. Was mache ich falsch? Bin für jeden Hinweis sehr dankbar.

Grüsse
monk77

Re: for each Schleife in calc

Verfasst: So, 10.10.2010 18:44
von Karolus
Hallo

Code: Alles auswählen

...
for i = 11 to 15
   cell = sheet.getcellbyposition(0, i )
   if cell.value = 5 then
       cell.CellbackColor = rgb(172,255,47)
   end if
next i
...
Für diese Aufgabe benötigst du kein Makro, das geht besser per →Bedingter Formatierung

Gruß Karo

Re: for each Schleife in calc

Verfasst: So, 10.10.2010 19:01
von monk77
Hallo Karo,

mir ist bewusst, dass ich dies auch mit der bedingten Formatierung lösen kann. Ich bin gerade aber dabei von excel vba auf Oo basic umzuschwenken und daher möchte ich natürlich alles testen, was möglich ist. Ich danke Dir für Deinen Tipp und werde diesen umgehend ausprobieren. Gibt es in Oo keine for each Schleife?

edit:

Habe es auch ohne for each hinbekommen. Ich hatte nämlich noch das Problem, dass ich mehrere Spalten auf diese Weise formatieren möchte. Sicherlich könnte man den von Dir genannten code mehrmals untereinander ausführen lassen, was aber bei 100 Spalten mühsam wäre und den code aufplustern würde. Habe es jetzt so gelöst.

Code: Alles auswählen

dim cell as object
do until counter = 15
    for i = 11 to 15
       cell = sheet.getcellbyposition(counter, i )
       if cell.value = 5 then
           cell.CellbackColor = rgb(172,255,47)
       end if
    next i
counter = counter + 1
loop
Gruss
monk77

Re: for each Schleife in calc

Verfasst: So, 10.10.2010 20:09
von Karolus
Hallo
Gibt es in Oo keine for each Schleife?
Nein, nicht direkt, aber für einfache VBA-Syntax reicht evtl. die Zeile:
Option VBASupport 1
oberhalb der Sub.

Edit: for-Schleifen kann man schachteln:

Code: Alles auswählen

for counter = 0 to 15
   for i = 11 to 15
     'tu irgendwas
   next i
next counter
Gruß Karo

Re: for each Schleife in calc

Verfasst: So, 10.10.2010 21:19
von mumpel
Hallo!

Mit VBA-Code ist das kein Problem. Allerdings sollte man in OOo VBA-Code mit Bedacht einsetzen (man weiss ja nie...).

Code: Alles auswählen

Option VBASupport 1

Sub Schleife()
Dim Zelle As Range

For Each Zelle in Sheets(1).Range("A12:A16")
With Zelle
If .Value = 5 then
   .Interior.Color = RGB(172,255,47)
Else   
   .Interior.ColorIndex = xlNone
End If
End With
Next

End Sub
Gruß, René

Re: for each Schleife in calc

Verfasst: Di, 12.10.2010 10:08
von DPunch
Aloha
Karolus hat geschrieben:
Gibt es in Oo keine for each Schleife?
Nein, nicht direkt,
Doch, auch in OOo Basic gibt es for-each Schleifen.

Code: Alles auswählen

For Each Zelle in Sheets(1).Range("A12:A16")
Das Problem im vorliegenden Fall ist aber, dass die CellRange keine simple Auflistung von Zellen enthält.
Man kann sich also nicht pro Schleifendurchlauf einfach eine Zelle zurückgeben lassen.

Ein mögliches Anwendungsbeispiel für eine for-each Schleife:
Alle Zellen in einem Bereich blau färben, wenn sie das Wort "Hallo" enthalten.

Code: Alles auswählen

oDoc = thisComponent
oSheet = oDoc.Sheets(0)
oRange = oSheet.getCellRangeByName("A1:A16")
oSearchDesc = Sheet.createSearchDescriptor
oSearchDesc.SearchString = "Hallo"
oSearchDesc.searchWords = True
oResult = oRange.findAll(oSearchDesc)
If NOT isNull(oResult) Then
	For Each cellRange in oResult
		cellRange.CellBackColor = RGB(0,0,255)
	Next cellRange
End If

Re: for each Schleife in calc

Verfasst: Di, 12.10.2010 21:52
von matlat
Hallo DPunch
Alle Zellen in einem Bereich blau färben,...
...RGB(0,0,255)...
hellblau
nichts für ungut
Wolfgang