BASIC嵌套循环:过滤行

时间:2016-04-04 21:28:26

标签: basic

我使用LibreOffice Calc存储16种RGB颜色(B列中的红色,C中的绿色和D中的蓝色),然后我想用各自的颜色绘制16个单元格的背景。每种颜色都在一行中。

目前我已经能够部分实现这一目标:不仅画了16个细胞,还画了48个(16x3)!我似乎需要" group"嵌套循环。这是我的代码/宏:

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

这是结果: Screenshot

第一列颜色(H)正是我所需要的。其他两列出现在那里,所以:我如何修复我的嵌套循环?可能我需要使用简单的if语句来过滤它们,但我不确定。

编辑 - 供参考:解决方案应该类似于this one,但我已经读过它在OpenOffice上无法实现(我在LibreOffice上也没有考虑)

谢谢!

1 个答案:

答案 0 :(得分:2)

放下内循环 - 你不需要横向迭代:

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