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