2016-04-04 15 views
1

16 RGB rengini (B sütünde kırmızı, C yeşil ve D mavi) saklamak için LibreOffice Calc kullanıyorum, sonra her bir renkle 16 hücrenin arka planını boyamak istiyorum. Her bir renk bir satırda.TEMEL iç içe döngüler: filtreleme satırları

Şu anda bunu kısmen başardım: sadece 16 hücre boyanmadı, fakat 48 (16x3)! İç içe geçmiş halkaları "gruplandırmam gerekiyor" gibi görünüyor. Bu benim kod/makro geçerli: Screenshot

renkler (H) ilk sütunu tam olarak, ben gerekenler:

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 

Bu sonucudur. Diğer iki sütun var, yani: iç içe döngülerimi nasıl düzeltirim? Muhtemelen basit bir if ifadesini kullanarak onları filtrelemem gerekiyor, ama emin değilim.

DÜZENLEME - Başvuru için: Çözüm, ancak bunun OpenOffice üzerinde mümkün değildir okudum this one benzer olmalıdır (Ben LibreOffice üzerinde ne varsayalım).

Teşekkürler!

cevap

2

Sadece iç döngü damla - yatay yineleme gerekmez: Mükemmel yaradı

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

! O kadar kolay olabileceğini düşünmemiştim. Çok teşekkürler! – Gerard