Вопрос новичка - как в VBA передать массив из формы в форму

Программирование на Visual Basic for Applications
Danilka
Новичок
Новичок
 
Сообщения: 47
Зарегистрирован: 12.08.2005 (Пт) 0:36
Откуда: Moscow, Kremlin, 2789 steps SSW

Вопрос новичка - как в VBA передать массив из формы в форму

Сообщение Danilka » 12.12.2006 (Вт) 14:15

Здрасте всем!
проблема следующая - в ходе выполнения макроса загружается userform1 и формируется двумерный массив
задача - перенести массив в userform2 - как это сделать?
почитав форум - догаадываюсь, что надо это сделать через модуль класа - только вот разобраться в этом неполучается...
подкиньте ссылочку или пример плз.
Заранее благодарен,
Danilka.
Come get some !

ZlydenGL
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 148
Зарегистрирован: 13.08.2004 (Пт) 10:02

Сообщение ZlydenGL » 12.12.2006 (Вт) 14:18

Danilka, вариант 1 - глобальная переменная типа Variant

Вариант 2 - передавать переменную в userform2... Допустим через

Код: Выделить всё
Public Sub UserForm2_GetAr(Ar)
   MyArr = Ar
End Sub
Покой нам только снится!!! И то редко. Поскольку нет в мире совершенства, а есть только стремление к оному.

ZlydenGL
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 148
Зарегистрирован: 13.08.2004 (Пт) 10:02

Сообщение ZlydenGL » 12.12.2006 (Вт) 14:27

А можно еще в сторону ParamArray покопаться... Только не забывать, что этот элемент должен быть ПОСЛЕДНИМ в списке переменных, передаваемых процедуре/функции.
Покой нам только снится!!! И то редко. Поскольку нет в мире совершенства, а есть только стремление к оному.

Danilka
Новичок
Новичок
 
Сообщения: 47
Зарегистрирован: 12.08.2005 (Пт) 0:36
Откуда: Moscow, Kremlin, 2789 steps SSW

Сообщение Danilka » 12.12.2006 (Вт) 14:48

ZlydenGL писал(а):Danilka, вариант 1 - глобальная переменная типа Variant


а как двумерный массив записать в переменную? (хотя уменя массив значений long) ?


ZlydenGL писал(а):Danilka
Вариант 2 - передавать переменную в userform2... Допустим через

Код: Выделить всё
Public Sub UserForm2_GetAr(Ar)
   MyArr = Ar
End Sub


а это куда вставлять ?

(да-да, я -ламер)

заранее благодарен,
Danilka
Come get some !

Danilka
Новичок
Новичок
 
Сообщения: 47
Зарегистрирован: 12.08.2005 (Пт) 0:36
Откуда: Moscow, Kremlin, 2789 steps SSW

Сообщение Danilka » 12.12.2006 (Вт) 14:49

[quote="ZlydenGL"]А можно еще в сторону ParamArray покопаться... [quote]

встроенный хелп ничего подобного в Excel2003 не находит
Come get some !

ZlydenGL
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 148
Зарегистрирован: 13.08.2004 (Пт) 10:02

Сообщение ZlydenGL » 12.12.2006 (Вт) 15:24

Danilka писал(а):а как двумерный массив записать в переменную? (хотя уменя массив значений long) ?

А в чем проблема? В Variant можно все, что угодно писать :)

Danilka писал(а):а это куда вставлять ?

"Парутчик Ржевский, МААААААЛЧАТЬ!!!" (с) неизвестный полковник ;)
Если серьезно - то в код формы 2 :) И вызывать эту процедуру для передачи переменной/массива :)

А насчет ParamArray - как це нет?!! Вот вырезки из встроенного хелпа (в msdn.microsoft.com точно есть):
The arglist argument has the following syntax and parts:

[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type] [= defaultvalue]

ParamArray Optional. Used only as the last argument in arglist to indicate that the final argument is an Optional array of Variant elements. The ParamArray keyword allows you to provide an arbitrary number of arguments. ParamArray can't be used with ByVal, ByRef, or Optional.
Покой нам только снится!!! И то редко. Поскольку нет в мире совершенства, а есть только стремление к оному.

Krasnaja Shapka
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 87
Зарегистрирован: 26.10.2006 (Чт) 12:13
Откуда: Киев

Сообщение Krasnaja Shapka » 13.12.2006 (Ср) 19:16

ZlydenGL писал(а):Вариант 2 - передавать переменную в userform2... Допустим через
Код: Выделить всё
Public Sub UserForm2_GetAr(Ar)
   MyArr = Ar
End Sub

а можно уточнить... тут Ar это имя массива в первой форме?
а MyArr - во второй?
Если ясность вашего объяснения исключает ложное толкование, все равно кто-то поймет вас неправильно.

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 13.12.2006 (Ср) 19:27

Danilka, сделай Public-массив не в форме, а в модуле; он будет доступен отовсюду.

Danilka
Новичок
Новичок
 
Сообщения: 47
Зарегистрирован: 12.08.2005 (Пт) 0:36
Откуда: Moscow, Kremlin, 2789 steps SSW

Сообщение Danilka » 14.12.2006 (Чт) 14:08

У меня массив динамический - как же я го сделаю public ?

в Excel2003 userform1 (initialize) я считываю данные с листа :
Код: Выделить всё
Range(Cells(2, 2), Selection.End(xlDown)).Select
nms_used = Selection.Count
ReDim biga(nms_used - 1, 22)
Range(Cells(2, 1), Cells(nms_used + 1, 23)).Select
biga() = Selection

Затем загружаю их в listbox и редактирую.

какой код мне необходимо прописать в userform2 чтобы загрузить массив в новый listbox userform2?(именно из массива а не с листа?)
Come get some !

ZlydenGL
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 148
Зарегистрирован: 13.08.2004 (Пт) 10:02

Сообщение ZlydenGL » 15.12.2006 (Пт) 10:01

Вариант с паблик переменной: у тебя же наверняка в проекте еще и модули есть? Создай переменную типа
Код: Выделить всё
Public MyArr() as НужныйТебеТип

и все дела :) В UserForm1 ты будешь заполнять этот массив, а из UserForm2 - просто к нему обращаться.

Это в самом деле более простой вариант. Ну а если не хочешь заморачиваться с глобальными переменными - юзай мой вариант 2 :) В приведенном примере MyArr - внутренняя переменная UserForm2, а сама процедура - паблик (внешняя), но содержащаяся в UserForm2. Вызывать ее надо из кода так:

Код: Выделить всё
UserForm2_GetAr(ОбработанныйИЗаполненныйМассив)


Естественно, вызывать ее надо ПОСЛЕ того, как соответствующий массив будет заполнен.
Покой нам только снится!!! И то редко. Поскольку нет в мире совершенства, а есть только стремление к оному.


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 91

    TopList