powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Не изменяется размер динамического многомерного массива - почему?
5 сообщений из 5, страница 1 из 1
Не изменяется размер динамического многомерного массива - почему?
    #34412369
?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
?
Гость
Объявляется много мерный массив.
Dim MyArray() As Variant
Redim MyArray(1,3,5)

.... Далее в массив нормально записываются значения.
А вот это Redim Preserve MyArray(Ubound(MyArray)+1,3,5) ... не проходит.
Вываливается с ошибкой. Subscript out of range.
Где ошибка?
...
Рейтинг: 0 / 0
Не изменяется размер динамического многомерного массива - почему?
    #34412456
lena_####
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
If you use the Preserve keyword, you can resize only the last array dimension and you can't change the number of dimensions at all. For example, if your array has only one dimension, you can resize that dimension because it is the last and only dimension. However, if your array has two or more dimensions, you can change the size of only the last dimension and still preserve the contents of the array
Если Вы используете ключевое слово Preserve , Вы можете изменить только верхнюю границу последней размерности массива.

Соответственно, такой код не должен вызвать ошибку:
Код: plaintext
1.
2.
Dim MyArray()
ReDim MyArray( 4 ,  3 ,  5 )
ReDim Preserve MyArray( 4 ,  3 , UBound(MyArray) +  1 )

А такой вызовет:
Код: plaintext
1.
2.
Dim MyArray()
ReDim MyArray( 4 ,  3 ,  5 )
ReDim Preserve MyArray(UBound(MyArray) +  1 ,  3 ,  5 )
...
Рейтинг: 0 / 0
Не изменяется размер динамического многомерного массива - почему?
    #34412494
lena_####
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я, к сожалению допустила ошибку в использовании функции UBound.
При увеличении верхней границы последней размерности массива нужно вместо
Код: plaintext
UBound(MyArray) +  1 
писать
Код: plaintext
UBound(MyArray,  3 ) +  1 
т.е.
Код: plaintext
1.
2.
Dim MyArray()
ReDim MyArray( 4 ,  3 ,  5 )
ReDim Preserve MyArray( 4 ,  3 , UBound(MyArray,  3 ) +  1 )
...
Рейтинг: 0 / 0
Не изменяется размер динамического многомерного массива - почему?
    #34413182
ADSemenov.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
____ Однако есть всё-таки способ изменения любой границы многомерного массива.
____ Для этого надо построить "псевдо"-многомерный массив.

Praemonitus praemunitus
...
Рейтинг: 0 / 0
Не изменяется размер динамического многомерного массива - почему?
    #34420817
?
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
?
Гость
2Lena_####
Спасибо. Завела статический массив + переменная для фиксации реального количеста элекментов.
автор"псевдо"-многомерный массив
А можно немного поподробнее? Что-то ничего в нете найти не могу.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Не изменяется размер динамического многомерного массива - почему?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]