Страница: 1 |
Страница: 1 |
Вопрос: массивы
Добавлено: 01.02.07 04:33
Автор вопроса:
sasha
Подскажите как объявить динамический двумерный массив?
Ответы
Всего ответов: 9
Номер ответа: 1
Автор ответа: -АлександР-
Вопросов: 55
Ответов: 1008
Web-сайт:
Профиль | | #1
Добавлено: 01.02.07 09:46
dim s()
redim s(1 to 3, 1 to 3) as byte
Номер ответа: 2
Автор ответа: GDK
Вопросов: 13
Ответов: 348
Профиль | | #2
Добавлено: 27.02.07 17:24
Кстати работает ли такой код:
redim preserve s(1 to 4, 1 to 3) as byte.
Это чтобы массив не обнулялся при переопределении.
У меня почему то не вышло (массив обнулился).
Номер ответа: 3
Автор ответа: AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #3
Добавлено: 27.02.07 17:51
Помоему при изменении ненижней границы идет какое-то перераспределение памяти, короче все стирается.
Номер ответа: 4
Автор ответа: GDK
Вопросов: 13
Ответов: 348
Профиль | | #4
Добавлено: 28.02.07 12:43
Хочу сразу заметить, что при переобъявлении массива все записанные в него данные стираются - массив обнуляется. Чтобы этого не происходило, надо использовать ключевое слово Peserve:
Redim Preserve Mass (5) as String
Это из одной статьи. Но только она по VB5, а не по VBA
Номер ответа: 5
Автор ответа: Alex
ICQ: no
Вопросов: 3
Ответов: 13
Web-сайт:
Профиль | | #5
Добавлено: 20.03.07 15:05
Объявление дин. массива
dim N_Array(a,b) as type - двухмерный
N_Array(a,b,c) - трехмерный и т. д.
инициализация
redim (Preserve) N_Array(a,b)
перед этим незабыть определить значения диапазона массива.
Изменять размерность можно только верхнего диапазона, т. е. переменная b, и незабыть при переопределении написать Preserve.
И еще после использования массива не забыть его удалить, а то останется в памяти после завершения работы макроса
Erase N_Array()
Номер ответа: 6
Автор ответа: ADSemenov.ru
Вопросов: 5
Ответов: 276
Web-сайт:
Профиль | | #6
Добавлено: 20.03.07 16:08
____ Тут, как то маялся с формированием меню по правой кнопке и очень захотелось иметь думерный массив с номером меню и самим меню в виде строк. По смыслу, это скорее структура, чем двумерный массив. Решение пришло странное и прикольное, которое ни в каких книгах не встречал.
Public avList(45) As Variant
...
avList(1) = Array("Pural", "PVDF", "PurMat"
...
avList(15) = Array(11, 20, 21, 23, 29, 31, 32, 33, 35, 37, 40, "Zn"
...
avList(45) = Array("Тройник трубы 87мм", "Тройник трубы 100мм"
____ Весь прикол в обращении к этому двумерному массиву:
____ И всё работает!
____ А если объявить основной массив динамическим, то и все измерения можно будет менять по своему усмотрению. Полагаю, что точно также можно и размерность повысить.
Номер ответа: 7
Автор ответа: AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #7
Добавлено: 20.03.07 17:24
Че-то я немного не втыкнул в этот пост. Что ты имешь ввиду??
Номер ответа: 8
Автор ответа: ADSemenov.ru
Вопросов: 5
Ответов: 276
Web-сайт:
Профиль | | #8
Добавлено: 20.03.07 18:22
____ Первая размерность (1 to 45) — номер меню.
____ Вторая размерность для всех меню разная (любая).
____ Обращение к строке меню, например: avList(15)(12) — получим символьную строку "Zn". Прикольно то, что индексы указываются не через запятую, а в отдельных скобках.
Номер ответа: 9
Автор ответа: AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #9
Добавлено: 20.03.07 19:18
А, понял! Не знал такого прикола, как массив в массиве +)
Интересно, а так можно?
,"fjd"
,3863,App.Path)