Макро-функция LibreOffice Calc для доступа к диапазону ячеек

У меня есть функция из Функция доступа к диапазону ячеек (повторяется здесь):

public function CHECKBZRANGE(vCellRangeValues as variant) as integer

    dim i as integer
    dim vCellValue as variant

    for each vCellValue in vCellRangeValues
        msgbox vCellValue
        i = i + 1
    next

    CHECKBZRANGE = i
end function

который раньше работал в LibreOffice ‹= 6.x.y, например как =CHECKBZRANGE(A6:C9). Теперь в LibreOffice 7.0.0.3 я получаю это сообщение об ошибке

Inadmissible value or data type.
Data type mismatch.
[OK]

в соответствии

for each vCellValue in vCellRangeValues

Я искал это, но не нашел ответа. Это:

  1. Новая функция LibreOffice VBA?
  2. Регресс?

Как мне получить доступ к значениям диапазона в макросе функции?


person sphh    schedule 11.09.2020    source источник


Ответы (1)


Поскольку vCellRangeValues ​​- это не диапазон ячеек, а массив значений этих ячеек, вы должны использовать два вложенных цикла для отображения каждого значения - по строкам и столбцам:

Function CHECKBZRANGE(vCellRangeValues As Variant) As Integer 
Dim iRow As Long, iColumn As Long 
    For iRow = LBound(vCellRangeValues) To UBound(vCellRangeValues)
        For iColumn = LBound(vCellRangeValues,2) To UBound(vCellRangeValues,2)
            msgbox "Cell (" & iRow & "," & iColumn & ") = " & vCellRangeValues(iRow, iColumn )
        Next iColumn
    Next iRow
    
    CHECKBZRANGE = (UBound(vCellRangeValues)-LBound(vCellRangeValues) +1) * _
                                    (UBound(vCellRangeValues,2)-LBound(vCellRangeValues,2) +1)
End Function 
person JohnSUN    schedule 14.09.2020
comment
Кстати, тот факт, что функция принимает в качестве параметра массив значений, а не диапазон ячеек, указывается в ответе, на который вы ссылаетесь. - person JohnSUN; 14.09.2020
comment
Спасибо. Это рабочий обходной путь (и, возможно, более чистый, но более сложный способ). Тем не менее, он не отвечает на мой вопрос, почему for each vCellValue in vCellRangeValues больше не работает. Я довольно часто использую его в своих макросах, которые теперь мне нужно переписать. Регресс? Изменившееся дизайнерское решение? @JohnSUN, можешь пролить свет на это? - person sphh; 15.09.2020
comment
У вас еще есть Option VBASupport 1 во второй строке модуля? Это ЗДЕСЬ - person JohnSUN; 15.09.2020
comment
Добавление Option VBASupport 1 сделало это. Теперь макрос из моего вопроса снова работает для последней версии LibreOffice. Напомним: для LibreOffice ‹7 мне не нужно Option VBASupport 1; для LibreOffice = 7. * Мне нужно Option VBASupport 1. - person sphh; 16.09.2020