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

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

28 Сентябрь 2020, 22:09 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

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


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
Форумчанин
***
Offline Offline

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


« Ответ #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!