ВБА - Како креирати корисничку форму у модулу класе

Креирајте УсерФорм који садржи динамички број контрола и проверите да ли су покренути одређеним догађајима. Да бисмо постигли овај резултат, користићемо УсерФорм и модул класе и додијелити било коју контролу динамички креирану у усерформ модулу класе. Коначно, циљ овог туторијала је и да се добије један модул и да се функција позивања учини што једноставнијом (ограничена на 2-3 линије кода).

  • Предувјети
  • Код
    • Модул класе
  • Функција позива

Предувјети

Идите у Екцел опције > Труст Манагемент > Мацро Сеттингс и уверите се да је омогућена следећа опција: Труст приступ ВБА пројекту објектни модел .

Код такође захтева ниже наведене референце, наиме, Мицрософт Формс 2.0 библиотеку објеката и Мицрософт Висуал Басиц за апликације Ектенсибилити 5.3 . Можете их омогућити тако што ћете кликнути на мени Тоолс у ВБА едитору, а затим на Референце .

Код

У овом примеру, направићемо усерформ који садржи два дугмета. Када кликнете на ово дугме, њихов наслов ће бити приказан у коду функције позива.

Модул класе

Креирајте модул класе у ВБА пројекту, назовите га као ПремиерЕкемпле (својство ЦлассНаме) и убаците овај код:

 Оптион Екплицит

'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!

'Омогућите следеће референце (Алати> Референце)

Мицрософт Формс 2.0 библиотека објеката

Мицрософт Висуал Басиц за апликације Ектенсибилити 5.3

'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!

Публиц маФорм Ас Објецт 'Усерформ

Публиц ВитхЕвентс Буттон као МСФормс.ЦоммандБуттон '

Публиц Дицо Ас Објецт 'Објет Дицтионнари = Објецт цоллецтион

Привате Ном Ас Стринг 'Ном => креира или брише усерформ

Привате Суб Цласс_Инитиализе ()

'цреате цласс

Постави Дицо = ЦреатеОбјецт ("Сцриптинг.дицтионари")

Енд Суб

Јавна вредност функције ()

'Метода Валуе де Нотре Цлассе дозвољава креирање корисничког обрасца

'и враћа вредност

НевУсф "Мон премиер УсерФорм" 'креира усерформ

НевБоутон "тото", "ТОТО", 120, 30, 5, 5 'креира ТОТО дугме

НевБоутон "тити", "ТИТИ", 120, 30, 5, 35 'креира ТИТИ дугме

маФорм.Схов 'дисплаи усерформ

Он Еррор ГоТо фин

Валуе = маФорм.Таг 'доделите вредност коју садржи Таг за усерформ нашој функцији.

Унлоад маФорм

Екит Фунцтион

фин:

Енд Фунцтион

Приватни Суб НевУсф (монЦаптион Ас Стринг)

'Креирање корисничког обрасца

Сет маФорм = ТхисВоркбоок.ВБПројецт.ВБЦомпонентс.Адд (3)

Ном = маФорм.Наме

ВБА.УсерФормс.Адд (Ном)

Сет маФорм = УсерФормс (УсерФормс.Цоунт - 1)

Са маФорм

.Цаптион = монЦаптион

.Видтх = 150

.Хеигхт = 100

Завршити

Енд Суб

Публиц Суб НевБоутон (име као низ, наслов као низ, ширина као дупла, висина као дупла, лева као двокреветна, врх као дупли)

'Креирање контролног дугмета

Дим Обј

Поставите Обј = маФорм.Цонтролс.Адд ("формс.ЦоммандБуттон.1")

Ако је Обј = Истина онда излази Под

Дим цлс Као нови ПремиерЕкемпле

Поставите цлс.маФорм = маФорм

Постави цлс.Боутон = Обј

Витх цлс.Боутон

.Наме = Име

.Цаптион = Наслов

.Смјерите лијево, врх, ширина, висина

Завршити

Дицо.Адд Наме, цлс

Сет цлс = Ништа

Енд Суб

Приватни Суб Боутон_Цлицк ()

'процедура догађаја за клик дугмета

маФорм.Таг = Боутон.Цаптион

маФорм.Хиде

Енд Суб

Привате Суб Цласс_Терминате ()

'цласс делетион

Дим ВБЦомп Ас ВБЦомпонент

Сет Дицо = Ништа 'брисање свих инстанци наше класе => сви тастери

Ако је Ном "" Онда "ако је то усерформ (јединствени пример који има" Ном "својство попуњено)

Поставите ВБЦомп = ТхисВоркбоок.ВБПројецт.ВБЦомпонентс (Ном) 'претрагу

ТхисВоркбоок.ВБПројецт.ВБЦомпонентс.Ремове ВБЦомп 'делете

Енд Иф

Енд Суб

Функција позива

Процедура за функцију позива је увелико поједностављена ... захваљујући модулу класе, имате приступ усерформ-у и Валуе-у. Враћа се на једноставан начин, користећи доњи позивни код:

 Суб тест ()

Дим МиФорм Ас Нев ПремиерЕкемпле

МсгБок МиФорм.Валуе

Постави МиФорм = Ништа

Енд Суб

Претходни Чланак Sledeći Чланак

Топ Савети