Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.07.2011, 07:06   #1
Naadir
 
Регистрация: 25.07.2011
Сообщений: 3
По умолчанию VBA "массив в массиве"

доброго всем времени !

С VBA я не долго просьба сильно не ругаться коли что не так

Вот какой вопрос.
Есть потребность хранить имена массивов в массиве, а потом к ним обращаться в коде...

dim NameMas(0 To 2) As String

NameMas(0) = "mas1"
NameMas(1) = "mas2"
NameMas(2) = "mas3"

и пытаюсь :

Erase NameMas(0) ( тоесть хочу очистить mas1) он ругаеться....

Подскажите есть ли возможность реализовать ??
Вопрос собственно можноли хранить имена массивов в массиве, а потом к ним обращаться в коде...через массив...

Спасибо !!
Naadir вне форума Ответить с цитированием
Старый 25.07.2011, 09:37   #2
Djeki
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 136
По умолчанию

NameMas(0)=""
Djeki вне форума Ответить с цитированием
Старый 25.07.2011, 09:40   #3
Watcher_1
Форумчанин
 
Аватар для Watcher_1
 
Регистрация: 22.06.2011
Сообщений: 325
По умолчанию

Цитата:
Сообщение от Djeki Посмотреть сообщение
NameMas(0)=""
И что это такое.... Вы просто присвоили пустое значение строковой переменной.
В массиве ведь были не массивы а строки!
Заказать макрос можно на сайте http://excel4you.ru/
Watcher_1 вне форума Ответить с цитированием
Старый 25.07.2011, 10:37   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

VBA не поддерживает обращение к массивам по имени.
Зная имя переменной, ссылающейся на массив, вы не сможете получить доступ к массиву.

Если так уж надо то, чего вы пытаетесь добиться (хотя я очень сомневаюсь в необходимости этого - ибо несколько лет пишу макросы, а с такой необходимостью не сталкивался) - то храните в массиве NameMas не имена массивов, а сами массивы.
EducatedFool вне форума Ответить с цитированием
Старый 25.07.2011, 11:05   #5
Naadir
 
Регистрация: 25.07.2011
Сообщений: 3
Сообщение

EducatedFool спасибо за четкий ответ.

нельзя получить ссылку про описание храненеия массива в массиве...
смысле как с этоим работать...

и еще может подскажите..

задача примерно в следуещем собрать с 10 листов информацию
с кучей разных условий и в зависимости от условий собирать
разные ячейки
перенести в 1 таблицу

я пытался написать одну процедуру и в одном цикле делать проверку каждого листа по очереди и складывая данные в разные массивы... стопарнулся на том что надо менять имя массива в цикле и немогу додумать как...

может подкинете идейку..

можна конечно просто продублировать операцию для каждого листа... но както не универсально чтоле... да и код громоздкий будет ...

Пытаюсь чегото писать можна сказать 2 раз ...такчто сильно не ругайте если пытаюсь изобрести велосипед....
Naadir вне форума Ответить с цитированием
Старый 25.07.2011, 11:34   #6
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Массив в массиве тоже не делал, а вот массив в словаре - приходилось.
Вот:
Код:
        If Not oDict.Exists(temp) Then
            ReDim b(1 To 2)
            b(1) = a(i, 3): b(2) = a(i, 7)
            oDict.Add temp, b
        Else
            b = oDict.Item(temp)
            b(1) = b(1) + a(i, 3): b(2) = b(2) + a(i, 7)
            oDict.Item(temp) = b
        End If
Возможно, можно не извлекать массив в переменную перед изменением, но не проверял.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 25.07.2011, 11:45   #7
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
стопарнулся на том что надо менять имя массива в цикле и немогу додумать как...
зачем менять имя???
вы же листы по очереди перебираете...

Используйте один и тот же массив - к примеру, с именем arr
И, к примеру, когда в цикле вы будете обрабатывать 5-й лист (а в массиве будут данные с 4-го листа), просто заносите новые данные в этот же массив (можете предварительно его очистить - Erase arr, хотя это не обязательно, ибо при чтении диапазона методом типа arr = [a1:b10].value исходный массив затирается)
Ведь в момент обработки 5 листа данные с 4 листа уже будут не нужны.
EducatedFool вне форума Ответить с цитированием
Старый 25.07.2011, 11:55   #8
Naadir
 
Регистрация: 25.07.2011
Сообщений: 3
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
зачем менять имя???
вы же листы по очереди перебираете...
Ведь в момент обработки 5 листа данные с 4 листа уже будут не нужны.
Во блин !!! Свежий взгляд !!!

точно ведь !!! я просто хотел сначала все собрать потом выложить разом !
а ведь можно сразу выкладывать полученное !!
и пользоваться по новой..... короче понял !!!

можна наверно еще было увеличить размеры массива и все спихать в 1 как вариант...

но ваш спосуб помойму проще !!!

З.Ы. откуда с Урала кстати ???
Naadir вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как обойти "преобразование типа из "string" в "float" невозможно" lexluter1988 Помощь студентам 1 07.08.2010 12:23
"ОКРВВЕРХ", "ОКР", "ЕСЛИ". Как бы их связать. Каравай Microsoft Office Excel 13 17.02.2010 09:53
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
Помогите ПЛИЗ доделать задачу "поиск мах эл. в одномерном массиве" JNN Общие вопросы C/C++ 3 04.06.2009 09:23