2016-04-04 12 views
1

Ich benutze LibreOffice Calc um 16 RGB-Farben zu speichern (rot in B-Spalte, grün in C und blau in D), dann möchte ich den Hintergrund von 16 Zellen mit der jeweiligen Farbe malen. Jede Farbe ist in einer Reihe.BASIS verschachtelte Schleifen: Zeilen filtern

Im Moment konnte ich das teilweise erreichen: Nicht nur 16 Zellen sind lackiert, sondern 48 (16x3)! Es scheint, dass ich die verschachtelten Schleifen "gruppieren" muss. Dies ist mein Code/Makro:

function bgcolor() 

Dim Doc, Sheet, CellPaint As Object 
Dim CellR, CellG, CellB As String 

Doc = ThisComponent 
Sheet = Doc.Sheets.getByIndex(0) 

For i = 1 to 16 step 1 
    For j = 1 to 3 step 1 
     CellR = Sheet.getCellByPosition(j+0,i).getValue() 
     CellG = Sheet.getCellByPosition(j+1,i).getValue() 
     CellB = Sheet.getCellByPosition(j+2,i).getValue() 
     CellPaint = Sheet.getCellByPosition(j+6,i) 
     CellPaint.CellBackColor = RGB(CellR,CellG,CellB) 
    next j 
next i 

bgcolor=CellPaint.CellBackColor 

end function 

Dies ist das Ergebnis: Screenshot

Die erste Spalte der Farben (H) ist, was ich brauche, genau. Andere zwei Spalten erscheinen dort, also: Wie repariere ich meine verschachtelten Schleifen? Wahrscheinlich muss ich sie mit einer einfachen if Anweisung filtern, aber ich bin mir nicht sicher.

EDIT - Zur Referenz: Die Lösung sollte auf this one ähnlich sein, jedoch habe ich gelesen, es auf Openoffice nicht möglich ist (ich nehme weder auf Libreoffice).

Danke!

Antwort

2

einfach die innere Schleife fallen - Sie müssen nicht horizontal durchlaufen müssen:

function bgcolor() 

    Dim Doc, Sheet, CellPaint As Object 
    Dim CellR, CellG, CellB As String 

    Doc = ThisComponent 
    Sheet = Doc.Sheets.getByIndex(0) 

    For i = 1 to 16 step 1 
    CellR = Sheet.getCellByPosition(1,i).getValue() 
    CellG = Sheet.getCellByPosition(2,i).getValue() 
    CellB = Sheet.getCellByPosition(3,i).getValue() 
    CellPaint = Sheet.getCellByPosition(7,i) 
    CellPaint.CellBackColor = RGB(CellR,CellG,CellB) 
    next i 

    bgcolor=CellPaint.CellBackColor 

end function 
+0

, die perfekt funktioniert! Ich dachte nicht, dass es so einfach sein könnte. Danke vielmals! – Gerard

Verwandte Themen