Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: массивы Добавлено: 01.02.07 04:33  

Автор вопроса:  sasha
Подскажите как объявить динамический двумерный массив?

Ответить

  Ответы Всего ответов: 9  

Номер ответа: 1
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #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-сайт: no
 Профиль | | #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-сайт: www.adsemenov.ru
 Профиль | | #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мм";)

____ Весь прикол в обращении к этому двумерному массиву:
  btn.Caption = avList(НомерМеню)(СтрокаМеню)

____ И всё работает!
____ А если объявить основной массив динамическим, то и все измерения можно будет менять по своему усмотрению. Полагаю, что точно также можно и размерность повысить.

Ответить

Номер ответа: 7
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #7 Добавлено: 20.03.07 17:24
Че-то я немного не втыкнул в этот пост. Что ты имешь ввиду??

Ответить

Номер ответа: 8
Автор ответа:
 ADSemenov.ru



Вопросов: 5
Ответов: 276
 Web-сайт: www.adsemenov.ru
 Профиль | | #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
А, понял! Не знал такого прикола, как массив в массиве +)
Интересно, а так можно?

arrBt=Array(Array(Array(1,2,3),Array("hsdsh",".dfh";),"fjd";),3863,App.Path)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам