Обнаружил
поведение, отличное от VBA при выполнении операций, указанных в теме.
' Copies an array to and from a range.
Sub CopyArrayToRange2()
Dim oSheet As Object, oRange As Object
Dim vArr(99, 9) As Variant '2D-array for range A1:J100
REM vArr = Array(Array("A1", "B1"), Array("A2", "B2")) 'array of arrays (jagged)
Dim r&, c&
For r = 0 To UBound(vArr, 1)
For c = 0 To UBound(vArr, 2)
vArr(r, c) = Chr(c + 65) & r + 1
Next c
Next r
' Копируем данные из массива в диапазон листа.
oSheet = ThisComponent.CurrentController.ActiveSheet
oRange = oSheet.getCellRangeByPosition(0, 0, UBound(vArr, 2), UBound(vArr, 1))
oRange.DataArray = vArr '.SetDataArray(vArr)
' NOTE: Данные присваиваются, несмотря на то что vArr - это 2D-массив
' Изменяем данные. Делаем что-то ещё...
With oRange.getCellRangeByName("A1")
.String = .String & "*" 'changed
End With
' Копируем данные из диапазона обратно в массив.
' NOTE: Как выяснилось, LO, в отличие от Excel, автоматически
' не преобразует объявленную переменную в 2D-массив, соответствующий
' размерности диапазона ячеек, а присваивает ей массив массивов.
ReDim vArr()
' Осуществляем доступ к элементам внутри массива массивов
' с использованием координат элемента (это не 2D-массив, как хотелось бы).
vArr = oRange.DataArray '.getDataArray()
MsgBox vArr(0)(0) '>> A1*
End Sub
Комментарий. Метод диапазона setArrayData() требует массив массивов, но принимая 2D-массив, преобразует его к требуемому виду.
Однако метод getArrayData() возвращает обратно именно массив массивов, требующий другого обращения к элементам:
vArr(row)(column) вместо vArr(row, column)
В результате в коде выше с одной переменной работаем по-разному. Это плохо.
Вопрос: Как получить диапазон листа в виде 2D-массива?. Возможно, надо работать с другими свойствами диапазона. Или что я делаю не так?
UPD: А может, это баг? Два "симметричных" метода работают по-разному...
Справочно:
https://vremya-ne-zhdet.ru/vba-excel/diapazon-yacheyek-i-massiv-obmen-znacheniyami/https://riptutorial.com/vba/example/16563/jagged-arrays--arrays-of-arrays-