Ошибка при выполнении оператора Redim с массивом структур

Автор sokol92, 14 сентября 2020, 19:10

0 Пользователи и 1 гость просматривают эту тему.

sokol92

Написал (очередной) баг про Redim.

Следующий пример имеет практическое значение:

Sub RunRedim
   Dim aPropertyValues(0) As New com.sun.star.beans.PropertyValue
   ReDim aPropertyValues(5) As com.sun.star.beans.PropertyValue
   Msgbox Ubound(aPropertyValues)
End Sub


Msgbox выдает 0. Версия LO 7.0.1.2 (в 6.4 так же).

Если написать Redim Preserve, то работает.

Следующий код выдает выдает ошибку: Индекс за пределами заданного диапазона:

Sub RunRedim2
   Dim aPropertyValues() As com.sun.star.beans.PropertyValue
   ReDim aPropertyValues(5) As com.sun.star.beans.PropertyValue
   Msgbox Ubound(aPropertyValues)
End Sub


Наконец, следующий код работает выполняется нормально:

Sub RunRedim3
   Dim aPropertyValues As com.sun.star.beans.PropertyValue
   ReDim aPropertyValues(5)  As com.sun.star.beans.PropertyValue
   Msgbox Ubound(aPropertyValues)
End Sub

Владимир.

eeigor

#1
Похоже на ошибку... Во всяком случае в Excel VBA всё работает.
Как-то отлаживал подобный код и пришлось поставить заплатку: вставить оператор Erase. Тогда заработало.

Dim args(0) As New com.sun.star.beans.PropertyValue
...
Erase args()
ReDim args(3) As New com.sun.star.beans.PropertyValue

В Excel VBA дополнительно ничего "стирать" не надо. Это делает оператор ReDim.
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community