ВБА кориснички облици
Усерформ је веома важан део програмирања у ВБА. Омогућава вам да направите кориснички интерфејс професионалног изгледа за комуникацију са корисницима ваше ВБА апликације. Такође вам омогућава да у потпуности контролишете корисника у ономе што раде са вашом радном свеском.
Наравно, можете користити ћелије радног листа за прихватање параметара од корисника, али кориснички облик производи далеко боље корисничко искуство.
Проширивањем висине и ширине вашег корисничког облика на величину Екцел прозора, можете учинити да ваша апликација изгледа као нормална Виндовс апликација, при чему корисник потпуно није свестан да користи Екцел као хост.
Доступне су вам све нормалне контроле оперативног система Виндовс, као што су падајући прозори, оквири са листама, кућице са ознакама. Такође имате огроман низ метода, догађаја и својстава које можете користити за побољшање корисничког искуства.
Важна ствар је да када приказујете кориснички образац који је уграђен или модални, не можете уређивати код у ВБЕ -у нити приступити било којој Екцел функцији. Тек када се образац затвори, курсор ће се појавити у вашем коду.
Уграђени ВБА кориснички облици
Екцел ВБА као неколико уграђених образаца који се могу користити за комуникацију са корисником.
Оквир за поруке
Ово је најчешће коришћени облик у ВБА. Једноставно приказује текстуалну поруку, евентуално обавештавајући корисника да је унео неисправан унос или да се ВБА процес завршио. У свом најједноставнијем облику, они приказују текстуални низ, али можете додати и икону попут питања или ускличника и дати оквир за поруку другачији наслов.
Ово је основни пример. Постоји само једно дугме за клик, а насловна трака каже „Мицрософт Екцел“
Код за ово је врло једноставан:
123 | Под ТестМсгБок ()МсгБок "Овај процес је завршен"Енд Суб |
Можете да користите различите параметре за додавање дугмади, икона и промену насловне траке
123456789 | Под ТестМсгБок ()Дим Рет као варијантаРет = МсгБок ("Јесте ли сигурни?", ВбИесНо Или вбКуестион, "Моја апликација")Ако је Рет = вбДа„Ваш процес овдеИначеЕкит СубКрај АкоЕнд Суб |
Овај код додаје дугме „Да“ и „Не“ и икону знака питања и поставља насловну траку. Имајте на уму да можете комбиновати стилове оквира за поруке помоћу оператора „Или“
Такође, када враћате вредност из оквира за поруку, повратна променљива мора бити дефинисана као варијанта или вбМсгБокРесулт, а израз оквира за поруку мора да користи заграде,
Оквир за унос
Постоји врло једноставан оквир за унос уграђен у ВБА, иако је прилично рестриктиван у погледу онога што са њим можете да урадите. Ако можете, боље је дизајнирати прилагођени кориснички облик
12345 | Суб ТестИнпутБок ()Дим Рет Ас СтрингРет = ИнпутБок ("Молимо унесите своје име", "Унесите име")МсгБок РетЕнд Суб |
Такође можете додати подразумевану вредност за улаз у параметре.
Набавите отворено име датотеке
Ово вам омогућава да користите дијалог Виндовс датотеке у свом ВБА коду. Кориснику изгледа веома импресивно када је покренут, али га је врло једноставно уградити и аутоматски добијате све функције дијалога датотека.
Код ограничава корисника да види само Екцел датотеке. Нажалост, могли су да укуцају назив датотеке која није Екцел, у поље Име датотеке, и притисну дугме за отварање, па ће вам требати неки код да бисте били сигурни да је изабрана Екцел датотека.
Помоћу команде „ЦхДир“ промените подразумевани директоријум у своје захтеве пре него што прикажете дијалог датотеке
Обратите пажњу на употребу заменских знакова у параметру ФилеФилтер. Екцел датотеке за приказивање могу бити пре 2007, имати макрое или бити бинарне, па је филтер „.клс*“.
123456 | Суб ТестФилеДиалог ()Дим МиФиле Ас СтрингЦхДир "Ц: \ темп"МиФиле = Апплицатион.ГетОпенФиленаме ("Екцел датотеке (*.клс*),*. Кслс*", "Изаберите датотеку")МсгБок МиФилеЕнд Суб |
Ако је потребно, можете дозволити кориснику да одабере неколико датотека одједном помоћу параметра МултиСелецт. Подразумевано је Нетачно (само један одабир)
12345678 | Суб ТестФилеДиалог ()Дим МиФиле Ас ВариантЦхДир "Ц: \ темп"МиФиле = Апплицатион.ГетОпенФиленаме ("Екцел датотеке (*.клс*),*. Кслс*",, "Изаберите датотеку",, Тачно)За сваки ф У МиФилеМсгБок фСледеће фЕнд Суб |
Корисник у дијалогу са датотекама држи притиснут тастер Схифт да изабере више датотека.
Петља За сваку приказује пуну путању и назив сваке изабране датотеке
Екцел подразумевани дијалози
Унутар Екцел ВБА постоји збирка Диалогс коју можете користити за приказ било ког стандардног Екцел дијалога. Недостатак је то што не можете приступити параметрима које је корисник одабрао или променити изглед дијалога, али ти дијалози могу бити корисни у усмеравању корисника на стандардну Екцел функцију и омогућавању му да изабере одређене параметре у оквиру дијалога.
Добар пример за ово је приказивање дијалога „Штампај“ из ВБА:
123 | Суб ТестПринтДиалог ()Апплицатион.Диалогс (клДиалогПринт) .СховЕнд Суб |
Када отворите заграде у колекцији Диалогс, видећете листу огромног броја константи за уграђене дијалоге. Вреди експериментисати са неким од ових опција у вашем коду
Уметање новог корисничког обрасца
Можете дизајнирати сопствене прилагођене корисничке обрасце уметањем корисничког обрасца у уређивач Висуал Басиц (ВБЕ)
То можете учинити избором Убаци | УсерФорм на траци менија ВБЕ.
Кликните на „Кориснички образац“ и појавиће се нови празан образац спреман за развој
Сам облик (приказан као „УсерФорм1“) изгледа прилично мали, али можете користити ручице око њега да бисте повећали или га учинили још мањим повлачењем ручица курсором.
У доњем левом углу екрана налази се прозор са својствима. Пошто је фокус директно на самом обрасцу, он садржи сва својства форме специфична за тај образац.
Имајте на уму да када почнете да додајете контроле, као што су комбиновани оквири и командна дугмад, све те контроле имају свој скуп својстава и могу се веома разликовати у томе шта можете учинити са сваком од њих.
Својства која тренутно видите примењују се само на сам образац.
Својство „Име“ је назив који се користи за дефинисање објекта обрасца унутар ВБА кода. Можда ћете желети да употребите нешто значајније за име објекта, тако да приликом прегледа кода буде очигледно који се облик користи.
Својство „Назив“ ће се такође одразити на прозор „Пројецт Екплорер“ у горњем левом углу екрана
Желите да промените насловну траку свог обрасца у нешто другачије од „УсерФорм1“, а то можете учинити уписивањем новог текста на својству „Цаптион“
Можете направити велики број промена у начину на који корисник види ваш образац. Можете мењати боје, додавати слике, нпр. корпоративни лого, промените положај помоћу „Лево“ и „Горе“, промените величину помоћу „Висина“ и „Ширина“, промените показивач миша и још много тога
Сва ова својства се такође могу програмски променити за било коју контролу коју сте додали у образац. На пример, корисник може изабрати из контроле оквира са листом, а можда ћете желети да онемогућите или сакријете друге контроле на основу корисниковог избора
Коришћење Тоолбок -а
Приметићете да када кликнете на сам образац, појављује се скочни оквир са алаткама. Ако кликнете било где другде, нпр. окну својстава, нестаће, али ће се поново појавити када кликнете на образац.
Пакет алата пружа стварну механику дизајна обрасца. Ово вам омогућава да у образац додате нормалне Виндовс контроле које су корисницима познате.
Приметићете да на обрасцу постоји мрежа тачака. Ово је „снапгрид“ тако да ће, када додате контролу у образац, аутоматски поравнати позицију са редовима и колонама тачака. Ово увелико помаже у усклађивању ваших контрола како не бисте добили груб изглед контрола
Ако кликнете на контролу, а затим одлучите да је не користите, кликом на икону „стрелица“ у горњем левом углу оквира са алаткама ваш курсор се враћа у нормалу.
Помоћу Тоолс | можете додати додатне контроле у оквир са алаткама Додатне контроле на ВБЕ менију. Доступан је знатан број њих, али у зависности од верзија оперативног система Виндовс и Екцел, оне не функционишу увек, па је често потребно неко експериментисање.
Такође, ваши корисници можда немају приступ неким од ових додатних контрола или имају старије верзије оперативних система Виндовс и Екцел, што може изазвати проблеме. У великим организацијама, посебно ако су глобалне, не постоји стандардна верзија рачунара на коју се можете ослонити!
Додавање дугмета за излаз у образац
Командно дугме је једноставно додати у образац. Ово изгледа на исти начин као дугмад која видите у другим Виндовс обрасцима, обично као дугме „У реду“ или „Откажи“.
Кликните на икону командног дугмета у оквиру са алаткама. Ово је друга икона са леве стране у доњем реду икона. Погледајте горњу слику. На њој су слова „аб“.
Можете или да држите притиснут тастер миша и превучете контролу на образац, или можете да померите курсор на образац, где ће се променити у „укрштени“ курсор, а ви можете поставити и величину дугмета
Ако превучете контролу у образац, добићете подразумевану величину дугмета. Померање курсора на образац омогућава вам да промените величину дугмета превлачењем „крстастог“ курсора преко обрасца
Ваш образац ће сада изгледати овако:
Дугме ће имати подразумевани текст као наслов, али ћете га желети променити према сопственим захтевима. Можете кликнути на текст унутар дугмета („ЦоммандБуттон1“) и то ће вам омогућити да директно уредите наслов.
Такође га можете променити у прозору својстава (доњи леви угао екрана). Видећете својство под називом „Наслов“ и за то можете уредити вредност. Промените ово у „Излаз“
Као и код својстава обрасца, својство „Име“ дефинише назив који ће се користити у вашем ВБА коду. Можда ћете желети да у свом коду употребите име које је значајније и очигледније. Ово можете унети против својства „Име“.
Дугме можете поново поставити тако што ћете га повући око обрасца, а величину му можете променити тако што ћете кликнути на ручке дугмади (бели квадратни оквири) и превући ручице да бисте их повећали или смањили
Такође можете да промените величину дугмета променом вредности висине и ширине у прозору својстава
Образац у Екцелу можете погледати кликом на зелени троугао на ВБЕ траци са алаткама или притиском на Ф5
Образац можете позвати из ВБА кода унутар модула помоћу методе „Прикажи“
123 | Суб СховФорм ()УсерФорм1.СховЕнд Суб |
Ваш кориснички образац је заправо глобални објекат и може се позвати са било ког места у вашем коду
Тренутно ваше командно дугме не ради ништа јер иза њега нема ВБА кода. Ово морате сами написати! Све што се тренутно може догодити је да можете кликнути на „Затвори“ Кс у горњем десном углу обрасца.
Да бисте додали ВБА код, двапут кликните на дугме на обрасцу
Ово ће вас одвести до нормалног прозора ВБА кода и приказаће подразумевани догађај клика.
За затварање обрасца користите методу „Сакриј“, а можете додати и било који други код, на пример оквир за поруку да бисте потврдили кориснику шта се догодило.
Имајте на уму да прозор кода има два падајућа менија на врху. Први вам омогућава да изаберете контроле образаца, а други приказује све догађаје који су вам доступни за додавање кода. Очигледно за дугме је догађај „клик“, али постоје и други, попут „двоструког клика“ или „померања миша“
Када сада покренете образац, дугме заправо чини нешто. Образац нестаје и приказује се оквир за поруку који потврђује да је образац затворен
Наравно, можете повећати излазну шифру. Можда ћете желети да прикажете други образац или да предузмете мере у вези са параметрима које је корисник унео у ваш образац
Додавање контроле ознака у образац
Контроле ознака служе за постављање упита кориснику о томе какве податке треба да унесе у контролу на обрасцу, нпр. оквир за текст, падајући мени итд. Ознака подразумевано нема граница, али се по потреби могу додати кроз прозор својстава.
Као контрола, читају се само кориснику и једноставно су начин постављања текста на образац, било да се ради о подебљаном заглављу или упутству шта да унесете или изаберете.
Да бисте додали ознаку, кликните на икону „А“ у оквиру са алаткама (горњи ред, други са леве стране) и кликните двапут на њу или померите курсор на образац и изаберите положај и величину.
Помоћу својства „Цаптион“ у прозору својстава или кликом на контролу ознаке, можете унети текст контроле ознаке.
Имајте на уму да ће се текст преломити према величини контроле налепнице, а ако је низ текста предугачак, неће се појавити у потпуности на обрасцу, па морате пазити на величину контроле налепнице.
Помоћу прозора својстава можете променити изглед контроле налепнице, са различитим бојама, фонтовима, стилом леђа, нпр. ако прекрива слику и желите да буде транспарентна
За контролу ознаке није потребно креирати код. Главна сврха је додавање текста у образац тако да корисник може видети како функционишу све остале контроле
Додавање контроле текста у образац
Контрола текста се користи да дозволи кориснику да унесе текст, на пример уношење имена или коментара
Контрола текста се додаје из оквира са алаткама кликом на икону контроле текста (горњи ред, трећа с леве стране) и двоструким кликом или превлачењем контроле на позицију на обрасцу.
Контрола текста се често меша са контролом ознаке, али текстуална контрола је она за унос корисника
Текст „Унесите своје име“ је контрола налепнице, као што је претходно описано, и сада имамо бело текстуално поље спремно за корисника да унесе нешто у
Помоћу прозора својстава можете променити боје, фонтове, специјалне ефекте или користити знакове лозинке за оквир за текст. Доступна је огромна флексибилност
Једно веома важно својство оквира за текст је својство „МултиЛине“. Ако желите да корисник унесе велику количину текста у контролу текста, нпр. коментаре, онда својство „МултиЛине“ мора бити постављено на Труе.
Подразумевано је вредност Фалсе, што значи да, колико год да направите оквир за текст, унети текст ће остати у једном непрекидном реду и помераће се изван оквира за текст. Неће се омотати унутар кутије.
Не постоји искачући прозор када десним тастером миша кликнете на оквир за текст док је покренут, али ЦТРЛ+В ће радити за Налепи, а ЦТРЛ+Ц за Исеци, ако корисник жели да исече и залепи текст у и са другог апликације
Опет, морате да напишете сопствени код да бисте се бавили текстом који је корисник унео. Можда ћете желети да га пренесете у ћелију на радном листу
Овај код можете додати у догађај „Промени“ за оквир за текст
123 | Привате Суб ТектБок1_Цханге ()Табеле („Лист1“). Опсег („А1“). Вредност = ТектБок1.ВредностЕнд Суб |
Можда ћете такође желети да унесете неки код за проверу да бисте проверили да корисник не уноси смеће што ће имати катастрофалне ефекте на вашу апликацију
Догађај промене није добар за ово јер се позива сваки пут када корисник откуца нови знак. Корисник би могао почети куцати низ текста и одмах открити да је прекршио ваша правила провјере ваљаности прије него што доврши важећи текст.
Користите догађај „Излаз“. Ово се активира када корисник помери фокус на другу контролу на обрасцу, што значи да корисник више не уноси податке.
123456 | Привате Суб ТектБок1_Екит (БиВал Цанцел Ас МСФормс.РетурнБоолеан)Ако је ИсНулл (ТектБок1.Валуе) Или Лен (ТектБок1.Валуе) <4 ТадаМсгБок "Име је неважеће", вбЦритицалТектБок1.СетФоцусКрај АкоЕнд Суб |
Када корисник кликне на другу контролу на обрасцу, овај код тестира нулл вредност у оквиру за текст или мање од 4 знака. Ако је тест тачан, појавиће се оквир са поруком са критичном иконом који обавештава корисника да је име неважеће, а фокус се помера назад у текстуални оквир који корисник може исправити.
Имајте на уму да ће се, чак и ако корисник притисне дугме Екит, прво извршити излаз из текстуалног оквира, тако да се спречава излаз корисника без исправљања уноса
Иницијализујте и активирајте догађаје на обрасцу
Када ВБА први пут креира и изгради образац, покреће догађај „Иницијализација“. Међутим, пошто се образац приказује и у овом тренутку, он такође покреће догађај „Активирај“. Од тада па надаље, сваки пут када се образац појави методом „Прикажи“ или се појави као део хијерархије образаца, тада се активира догађај „Активирај“, али не и догађај „Иницијализација“
Догађај „Иницијализација“ се дешава само једном, али се догађај „Активирај“ може догодити много пута
На обрасцу ћете можда желети да подесите подразумеване вредности са радног листа у контролама за унос, нпр. текстуална поља, тако да се они појављују при првој употреби обрасца, али корисник може пребрисати подразумеване вредности и ове нове вредности ће остати на месту све док је код покренут
12345678 | Привате Суб УсерФорм_Инитиализе ()ТектБок1.Валуе = Табеле ("Лист1"). Опсег ("А1"). ВредностАко је ТектБок1.Валуе = ”” ЗатимТектБок1.Висибле = ФалсеИначеТектБок1.Висибле = ТачноКрај АкоЕнд Суб |
Догађај „Иницијализација“ можете пронаћи у другом падајућем менију у прозору кода, а назив корисничког обрасца у првом падајућем менију.
Овај код ће користити вредност у ћелији А1 на „листу 1“ као подразумевану вредност у оквиру за текст који је креиран раније у овом чланку. Када се образац појави први пут, појавиће се подразумевана вредност. Корисник тада може преписати задану вриједност и то ће се задржати. Ако је ЦеллА1 празан, оквир за текст ће бити скривен, у супротном ће бити видљив
Подразумевана вредност такође може бити тешко кодирана:
1 | ТектБок1.Валуе = “Јохн Смитх” |
Можда ћете желети и да се уверите да се вредности које је корисник унео поново појављују сваки пут када корисник покрене тај образац у оквиру те одређене Екцел сесије. ВБА код може лако да запише вредности назад у ћелије у радној свесци помоћу догађаја „Излаз“ у контроли и да их поново инсталира помоћу догађаја „Активирај“ на обрасцу
123 | Привате Суб ТектБок1_Екит (БиВал Цанцел ас МСФормс.РетурнБоолеан)Табеле („Лист1“). Опсег („А10“). Вредност = ТектБок1.ВредностЕнд Суб |
123 | Привате Суб УсерФорм_Ацтивате ()ТектБок1.Валуе = Табеле ("Лист1"). Опсег ("А10"). ВредностЕнд Суб |
Овај код ће учинити корисникове вредности постојаним и такође осигурати да се сачувају у остатку радне свеске
Чување ваше пријаве и образаца
Када сачувате Екцел радну свеску која садржи ваше обрасце, чувају се и сви обрасци и њихов ВБА код. Међутим, све вредности које обрасци држе док су приказане биће изгубљене.
Важно је написати код тако да када корисник изађе из радне свеске или обрасца, вредности се врате назад у ћелије унутар радне свеске и тако се сачувају.
Модални и немодални облици
Сам образац има својство „Прикажи модалитет“. Ово је подразумевано подешено на Тачно, али се може променити на Нетачно (немодално)
Ако је образац модални, то значи да ниједна Екцел функција не може приступити док се образац приказује. Ово укључује ваш код у прозору ВБЕ. Можете да видите код, али су курсор и тастатура онемогућени.
У немодалном облику можете приступити свим функцијама програма Екцел, укључујући прозор ВБЕ, док се образац приказује.
Ово је важно са становишта контроле понашања корисника
Затварање обрасца
Колико год добро написали свој код да бисте приморали корисника на одређену руту, они га лако могу заобићи кликом на „Затвори“ Кс у горњем десном углу обрасца
То можете спречити тако што ћете изменити догађај „КуериЦлосе“ у обрасцу
1234 | Привате Суб УсерФорм_КуериЦлосе (Откажи као цео број, Затвори начин као цео број)Откажи = ТачноМсгБок "Ова радња је онемогућена"Енд Суб |
Догађај „КуериЦлосе“ покреће се када корисник кликне на „Затвори“ Кс обрасца. Овај код поништава радњу, па је корисник приморан да користи дугме „Изађи“ и код који имате иза њега.
Омогућавање и онемогућавање контрола
Све контроле на обрасцу имају својство под називом „Омогућено“ које је постављено на Тачно или Нетачно. Ако је Нетачно, контрола је засивљена. Може се видети, али се не може користити.
Постоји и својство под називом „Видљиво“ које је поново постављено на Тачно или Нетачно.
Можете написати код како бисте одређену контролу учинили неупотребљивом или је учинили потпуно невидљивом за корисника. Помоћу изјаве „Ако“ можете изабрати околности када то требате учинити
На пример, у почетку бисте могли да онемогућите дугме „Изађи“, све док корисник не унесе вредност у ТектБок1 (име)
123 | Привате Суб УсерФорм_Инитиализе ()ЦоммандБуттон1.Енаблед = НетачноЕнд Суб |
1234567 | Привате Суб ТектБок1_Цханге ()Ако је Лен (ТектБок1.Валуе)> 0 ТадаЦоммандБуттон1.Енаблед = ТачноИначеЦоммандБуттон1.Енаблед = НетачноКрај АкоЕнд Суб |
Овај код користи образац „Инитиализе“ догађај за онемогућавање дугмета за излаз (командно дугме 1) када се образац први пут појави, а затим користи догађај „Цханге“ на ТектБок1 (наме) да омогући дугме Екит ако је нешто унето или онемогућено то ако је поље празно.
Догађај „Промена“ покреће се сваки пут када се унесе нови знак или избрише из оквира за текст. Ако корисник покуша да унесе текст како би дугме било омогућено, а затим избрише сав текст, дугме ће одмах бити онемогућено