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

.... Далее в массив нормально записываются значения.
А вот это Redim Preserve MyArray(Ubound(MyArray)+1,3,5) ... не проходит.
Вываливается с ошибкой. Subscript out of range.
Где ошибка?
...
Рейтинг: 0 / 0
23.03.2007, 17:16:13
    #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
23.03.2007, 17:27:55
    #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
24.03.2007, 09:44:37
    #34413182
ADSemenov.ru
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не изменяется размер динамического многомерного массива - почему?
____ Однако есть всё-таки способ изменения любой границы многомерного массива.
____ Для этого надо построить "псевдо"-многомерный массив.

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


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