2017-01-21 4 views
0

Я хотел бы работать с cellranges внутри моего макроса.Как передать cellrange пользователю, заданному макросом paramenter

Function SumIfColor(SumRange) 
    Dim oRange as object 
    Dim oSheet as object 

    ' Get Access to the Active Spreadsheet 
    oSheet = ThisComponent.CurrentController.ActiveSheet 

    ' Get access to the Range listed in Sum Range 
    oRange = oSheet.getCellRangeByName(SumRange).RangeAddress 
End Function 

Вопрос в том, как я могу назвать эту функцию реальным объектом cellRange вместо String. Поскольку getCellRangeByName работает только с переменной String. Потому что, когда я вызываю функцию как этот

sumifcolor(B1:B3) 

я получил следующее сообщение об ошибке: «Переменные не установлен»

Я прочитал некоторый намек here, но это не помогло мне.

ответ

2

Невозможно передать фактический объект CellRange. Одно из решений состоит в передаче строки и столбца, похожий на второй части ответа @Axel Рихтера в ссылке:

Function SumIfColor(lcol1, lrow1, lcol2, lrow2) 
    sum = 0 
    oCellRange = ThisComponent.CurrentController.ActiveSheet.getCellRangeByPosition(_ 
     lcol1-1,lrow1-1,lcol2-1,lrow2-1) 
    For lCol = 0 To oCellRange.Columns.Count -1 
    For lRow = 0 To oCellRange.Rows.Count -1 
     oCell = oCellRange.getCellByPosition(lCol, lRow) 
     If oCell.CellBackColor > -1 Then 
      sum = sum + oCell.Value 
     End If 
    Next 
    Next 
    SumIfColor = sum 
End Function 

Для вызова:

=SUMIFCOLOR(COLUMN(B1:B3),ROW(B1),COLUMN(B3),ROW(B3)) 

сумма будет пересчитываться каждый раз, когда значение в диапазоне B1:B3 изменено, из-за COLUMN(B1:B3). Однако, по-видимому, изменение только цвета ячейки не приводит к ее пересчету.