Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

2 Март 2021, 23:44 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Здесь можно поблагодарить участников форума Улыбка
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Ошибка при выполнении оператора Redim с массивом структур  (Прочитано 463 раз)
0 Пользователей и 1 Гость смотрят эту тему.
sokol92
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 305


WWW
« Стартовое сообщение: 14 Сентябрь 2020, 19:10 »

Написал (очередной) баг про 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
Ubuntu 18.04 LTS • LO 7.0.2.2
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 379



« Ответ #1: 14 Сентябрь 2020, 23:08 »

Похоже на ошибку... Во всяком случае в 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.
« Последнее редактирование: 14 Сентябрь 2020, 23:15 от eeigor » Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!