Uporabniške oblike VBA
Userform je zelo pomemben del programiranja v VBA. Omogoča vam izdelavo profesionalnega uporabniškega vmesnika za komunikacijo z uporabniki vaše aplikacije VBA. Omogoča vam tudi popoln nadzor nad uporabnikom pri tem, kaj počnejo z vašim delovnim zvezkom.
Seveda lahko uporabite celice delovnega lista za sprejemanje parametrov od uporabnika, vendar uporabniška oblika ustvari veliko boljšo uporabniško izkušnjo.
Z razširitvijo višine in širine vašega uporabniškega obrazca na velikost okna Excel lahko naredite svojo aplikacijo videti kot običajno aplikacijo Windows, pri čemer se uporabnik popolnoma ne zaveda, da uporablja Excel kot gostitelja.
Na voljo so vam vsi običajni kontrolniki sistema Windows, kot so spustni seznami, polja s seznami in kljukice. Za izboljšanje uporabniške izkušnje imate na voljo tudi ogromno metod, dogodkov in lastnosti.
Pomembno je, da ko prikažete uporabniško obliko, ki je vgrajena ali je modalna, ne morete urejati svoje kode v VBE ali dostopati do katere koli Excelove funkcije. Le ko je obrazec zaprt, se bo kazalec pojavil v vaši kodi.
Vgrajeni uporabniški obrazci VBA
Excel VBA kot več vgrajenih obrazcev, s katerimi lahko komunicirate z uporabnikom.
Okvir za sporočila
To je najpogosteje uporabljena oblika v VBA. Preprosto prikaže besedilno sporočilo, ki morebiti obvesti uporabnika, da je vnesel neveljaven vnos ali da se je postopek VBA končal. V svoji najpreprostejši obliki prikažejo besedilni niz, lahko pa dodate tudi ikono, na primer vprašaj ali klicaj, in polju za sporočilo dodelite drugačen naslov.
To je osnovni primer. Kliknite samo en gumb, v naslovni vrstici pa piše »Microsoft Excel«
Koda za izdelavo tega je zelo preprosta:
123 | Pod TestMsgBox ()MsgBox "Ta postopek je zaključen"End Sub |
Za dodajanje gumbov, ikon in spreminjanje naslovne vrstice lahko uporabite različne parametre
123456789 | Pod TestMsgBox ()Dim Ret kot variantaRet = MsgBox ("Ste prepričani?", VbYesNo Ali vbQuestion, "Moja aplikacija")Če je Ret = vbDa'Vaš postopek tukajSicer paZapri podKonec ČeEnd Sub |
Ta koda doda gumb "Da" in "Ne" ter ikono vprašaja in nastavi naslovno vrstico. Upoštevajte, da lahko sloge polja za sporočila združite z operaterjem 'Ali'
Ko vračate vrednost iz polja za sporočila, mora biti vrnitev spremenljivke definirana kot različica ali vbMsgBoxResult, stavek polja za sporočila pa mora vsebovati oklepaje,
Vnosno polje
V VBA je vgrajeno zelo preprosto polje za vnos, čeprav je precej omejujoče pri tem, kaj lahko storite z njim. Če lahko, je bolje oblikovati uporabniško obliko po meri
12345 | Sub TestInputBox ()Dim Ret kot nizRet = InputBox ("Prosimo, vnesite svoje ime", "Vnesite ime")MsgBox RetEnd Sub |
V parametre lahko dodate tudi privzeto vrednost za vnos.
Pridobite odprto ime datoteke
To vam omogoča uporabo pogovornega okna datoteke Windows v kodi VBA. Uporabniku izgleda zelo impresivno, ko se izvaja, vendar ga je zelo preprosto vključiti in z njim samodejno dobite vse funkcije pogovornega okna datotek.
Koda omejuje uporabnika, da vidi samo datoteke Excel. Na žalost lahko v polje Ime datoteke vnesejo ime datoteke, ki ni Excel, in kliknite gumb za odpiranje, zato boste potrebovali nekaj kode, da zagotovite, da je izbrana datoteka Excel.
Preden prikažete pogovorno okno za datoteke, z ukazom ChDir spremenite privzeti imenik v lastne zahteve
Upoštevajte uporabo nadomestnih znakov v parametru FileFilter. Datoteke Excel za prikaz so lahko pred letom 2007, imajo makre ali so binarne, zato je filter ».xls*«.
123456 | Sub TestFileDialog ()Zatemni mojo datoteko kot nizChDir "C: \ temp"MyFile = Application.GetOpenFilename ("Datoteke Excel (*.xls*),*. Xls*", "Izberite datoteko")MsgBox MyFileEnd Sub |
Po potrebi lahko uporabniku dovolite, da izbere več datotek hkrati s parametrom MultiSelect. Privzeto je False (samo enkratna izbira)
12345678 | Sub TestFileDialog ()Zatemni mojo datoteko kot variantoChDir "C: \ temp"MyFile = Application.GetOpenFilename ("Datoteke Excel (*.xls*),*. Xls*",, "Izberite datoteko",, True)Za vsako f V MyFileMsgBox fNaprej fEnd Sub |
Uporabnik v pogovornem oknu za datoteke zadrži tipko Shift, da izbere več datotek.
Zanka For Each prikazuje celotno pot in ime vsake izbrane datoteke
Privzeti pogovorni okni programa Excel
Znotraj Excela VBA je zbirka Dialogs, ki jo lahko uporabite za prikaz katerega koli standardnega Excelovega pogovornega okna. Slaba stran je, da ne morete dostopati do parametrov, ki jih je izbral uporabnik, ali spremeniti videza pogovornega okna, vendar so ti pogovorni okni lahko uporabni pri usmerjanju uporabnika na standardno funkcijo Excel in mu omogočajo, da v pogovornem oknu izbere določene parametre.
Dober primer tega je prikaz pogovornega okna 'Natisni' iz VBA:
123 | Pod TestPrintDialog ()Aplikacija.Dialogi (xlDialogPrint) .PrikažiEnd Sub |
Ko odprete oklepaje v zbirki Dialogs, boste videli seznam ogromnega števila konstant za vgrajena pogovorna okna. V kodi je vredno eksperimentirati z nekaterimi od teh možnosti
Vstavljanje obrazca za novega uporabnika
Svoje lastne uporabniške obrazce lahko oblikujete tako, da v urejevalnik Visual Basic (VBE) vstavite uporabniški obrazec
To naredite tako, da izberete Vstavi | UserForm v menijski vrstici VBE.
Kliknite »Uporabniški obrazec« in pojavil se bo nov prazen obrazec, ki ga lahko razvijate
Dejanski obrazec (prikazan kot »UserForm1«) je videti precej majhen, vendar lahko z ročicami okoli njega povečate ali še pomanjšate, tako da ročice povlečete s kazalcem.
V spodnjem levem kotu zaslona je okno lastnosti. Ker je poudarek neposredno na sami obliki, ta vsebuje vse lastnosti oblike, značilne za to obliko.
Upoštevajte, da ko začnete dodajati kontrolnike, kot so kombinirana polja in ukazni gumbi, imajo vsi ti lastni niz lastnosti in se lahko zelo razlikujejo glede tega, kaj lahko naredite z vsakim od njih.
Lastnosti, ki jih trenutno vidite, veljajo samo za sam obrazec.
Lastnost 'Name' je ime, ki se uporablja za opredelitev predmeta obrazca v kodi VBA. Za ime predmeta boste morda želeli uporabiti nekaj pomembnejšega, da bo med pregledovanjem kode očitno, kateri obrazec se uporablja.
Lastnost »Ime« se bo odražala tudi v oknu »Raziskovalec projektov« v zgornjem levem kotu zaslona
Naslovno vrstico obrazca boste želeli spremeniti v nekaj drugačnega od »UserForm1«, to pa lahko storite tako, da vnesete novo besedilo v lastnost »Caption«
Lahko naredite ogromno sprememb v tem, kako uporabnik vidi vaš obrazec. Barve lahko spremenite, slike dodate npr. logotip podjetja, spremenite položaj s tipkama "Levo" in "Zgoraj", spremenite velikost z uporabo "Višina" in "Širina", spremenite kazalec miške in še veliko več
Vse te lastnosti lahko tudi programsko spremenite za kateri koli kontrolnik, ki ste ga dodali v obrazec. Uporabnik lahko na primer izbere kontrolnik v polju s seznamom, druge kontrole pa lahko onemogočite ali skrijete glede na izbiro uporabnika
Uporaba orodjarne
Opazili boste, da se ob kliku na sam obrazec prikaže pojavno okno orodjarne. Če kliknete kjerkoli drugje, npr. podoknu lastnosti, bo izginilo, vendar se bo znova prikazalo, ko kliknete obrazec.
Orodjarna ponuja resnično mehaniko oblikovanja obrazca. Tako lahko v obrazec dodate običajne kontrolnike sistema Windows, ki jih uporabniki poznajo.
Opazili boste, da je na obrazcu mreža pik. To je "snapgrid", tako da bo, ko v obrazec dodate kontrolnik, samodejno poravnal položaj vrstic in stolpcev pik. To zelo pomaga pri poravnavi kontrolnikov, tako da ne boste dobili grobega videza kontrol
Če kliknete na kontrolnik in se nato odločite, da ga ne boste uporabili, se s klikom na ikono 'Puščica' v zgornjem levem kotu orodne vrstice vaš kazalec spremeni v običajno.
Z orodji Orodja | Dodatni kontrolniki v meniju VBE. Na voljo jih je precej, vendar glede na različice operacijskega sistema Windows in Excel ne delujejo vedno, zato je pogosto potrebno nekaj eksperimentiranja.
Prav tako vaši uporabniki morda nimajo dostopa do nekaterih od teh dodatnih kontrol ali imajo starejše različice operacijskega sistema Windows in Excel, kar lahko povzroči težave. V velikih organizacijah, še posebej, če so globalne, ne obstaja standarden računalnik, na katerega se lahko zanesete!
Dodajanje gumba za izhod v obrazec
Ukazni gumb je preprosto dodati v obrazec. To izgleda enako kot gumbi, ki jih vidite v drugih obrazcih sistema Windows, običajno kot gumb »V redu« ali »Prekliči«.
V orodni vrstici kliknite ikono ukaznega gumba. To je druga ikona na levi v spodnji vrstici ikon. Oglejte si zgornjo sliko. Na njem so črke 'ab'.
Lahko držite pritisnjen gumb miške in povlečete kontrolnik na obrazec, ali pa premaknete kazalec na obrazec, kjer se bo spremenil v "križni" kazalec, gumb pa lahko postavite in prilagodite
Če kontrolnik povlečete v obrazec, boste dobili privzeto velikost gumba. Če premaknete kazalec na obrazec, lahko spremenite velikost gumba tako, da povlečete kazalec »križ« čez obrazec
Vaš obrazec bo zdaj videti tako:
Gumb bo imel privzeto besedilo kot napis, vendar ga boste želeli spremeniti v svoje zahteve. Lahko kliknete besedilo v gumbu ('CommandButton1') in to vam bo omogočilo neposredno urejanje napisa.
Spremenite ga lahko tudi v oknu lastnosti (spodnji levi kot zaslona). Videli boste lastnost z imenom 'Caption' in za to lahko uredite vrednost. Spremenite to v »Izhod«
Tako kot pri lastnostih obrazca tudi lastnost »Ime« določa ime, ki bo uporabljeno v kodi VBA. Morda boste želeli v svoji kodi uporabiti ime, ki je bolj smiselno in očitno. To lahko vnesete v lastnosti 'Ime'.
Gumb lahko znova postavite tako, da ga povlečete po obrazcu, velikost pa lahko spremenite tako, da kliknete ročice gumbov (bela kvadratna polja) in povlečete ročice, da jih povečate ali zmanjšate
Gumb lahko tudi spremenite tako, da v oknu lastnosti spremenite vrednosti višine in širine
Obrazec v Excelu si lahko ogledate s klikom na zeleni trikotnik v orodni vrstici VBE ali s pritiskom na F5
Obrazec lahko pokličete iz kode VBA v modulu z metodo »Pokaži«
123 | Sub ShowForm ()UserForm1.ShowEnd Sub |
Vaš uporabniški obrazec je dejansko globalni objekt in ga je mogoče poklicati od koder koli v kodi
Trenutno vaš ukazni gumb ne naredi ničesar, ker za njim ni kode VBA. To morate napisati sami! Trenutno se lahko zgodi le to, da v zgornjem desnem kotu obrazca kliknete gumb »Zapri«.
Če želite dodati kodo VBA, dvokliknite gumb na obrazcu
To vas bo pripeljalo do običajnega okna kode VBA in prikazalo bo privzeti dogodek klika.
Za zapiranje obrazca uporabite metodo »Skrij«, lahko pa dodate tudi katero koli drugo kodo, na primer polje s sporočilom, da uporabniku potrdite, kaj se je zgodilo.
Upoštevajte, da ima okno za kodo dva spustna menija na vrhu. Prva vam omogoča izbiro kontrolnikov obrazca, druga pa prikazuje vse dogodke, ki so vam na voljo za dodajanje kode. Očitno za gumb je dogodek »klik«, obstajajo pa še drugi, na primer »dvojni klik« ali »premikanje miške«
Ko zdaj zaženete obrazec, gumb dejansko nekaj naredi. Obrazec izgine in prikaže se sporočilo, ki potrjuje, da je obrazec zaprt
Izhodno kodo lahko seveda povečate. Morda boste želeli prikazati drug obrazec ali ukrepati glede parametrov, ki jih je uporabnik vnesel v vaš obrazec
Dodajanje kontrolnika oznak obrazcu
Kontrolniki oznak so namenjeni vprašanju uporabnika, kakšne podatke mora vnesti v kontrolnik na obrazcu, npr. polje z besedilom, spustni meni itd. Oznaka privzeto nima meja, vendar jih lahko po potrebi dodate skozi okno lastnosti.
Kot kontrolo jih berejo samo uporabniki in so preprosto način vnosa besedila v obrazec, pa naj gre za krepko glavo ali navodila, kaj vnesti ali izbrati.
Če želite dodati oznako, kliknite ikono "A" v orodjarni (zgornja vrstica, druga levo) in jo dvokliknite ali premaknite kazalec na obrazec ter izberite položaj in velikost.
Z lastnostjo 'Caption' v oknu z lastnostmi ali s klikom na kontrolnik oznake lahko vnesete besedilo za nadzor oznake.
Upoštevajte, da se bo besedilo zavilo glede na velikost kontrolnika nalepke, in če je niz besedila predolg, se ne bo pojavil v celoti na obrazcu, zato morate biti pozorni na velikost kontrolnika nalepke.
Z oknom lastnosti lahko spremenite videz kontrolnika nalepk z različnimi barvami, pisavami, slogom hrbta, npr. če prekriva sliko in želite, da je pregledna
Za nadzor oznak ni treba ustvariti kode. Glavni namen je dodati besedilo obrazcu, tako da lahko uporabnik vidi, kako delujejo vsi drugi kontrolniki
Dodajanje besedilnega nadzora obrazcu
Besedilni nadzor se uporablja, da uporabniku omogoča vnos besedila, na primer vnosa imena ali komentarjev
Kontrolnik za besedilo je dodan iz orodjarne tako, da kliknete ikono za nadzor besedila (zgornja vrstica, tretja levo) in dvokliknete ali povlečete kontrolnik na mesto v obrazcu.
Kontrolnik besedila se pogosto zamenjuje z nalepko, vendar je nadzor besedila tisti, ki ga uporabnik vnese
Besedilo »Vnesite svoje ime« je kontrola nalepke, kot je opisano prej, in zdaj imamo belo besedilno polje pripravljeno, da lahko uporabnik nekaj vnese
V oknu z lastnostmi lahko spremenite barve, pisave, posebne učinke ali uporabite znake gesla za besedilno polje. Na voljo je velika prilagodljivost
Ena zelo pomembna lastnost besedilnega polja je lastnost 'MultiLine'. Če želite, da uporabnik v nadzor besedila vnese veliko besedila, npr. komentarji, potem mora biti lastnost 'MultiLine' nastavljena na True.
To je privzeto vrednost False, kar pomeni, da kljub temu, da je polje za besedilo veliko, bo vneseno besedilo ostalo v eni neprekinjeni vrstici in se bo pomaknilo iz polja z besedilom. Ne bo se ovijalo znotraj škatle.
Pojavnega okna ni, ko z desno miškino tipko kliknete polje z besedilom, ko se izvaja, vendar CTRL+V deluje za Prilepi, CTRL+C pa za Izreži, če želi uporabnik izrezati in prilepiti besedilo v drugo in iz nje aplikacije
Spet morate napisati svojo kodo za obravnavo besedila, ki ga je uporabnik vnesel. Morda ga boste želeli prenesti v celico na delovnem listu
To kodo lahko dodate v dogodek »Spremeni« za besedilno polje
123 | Zasebni podnapis TextBox1_Change ()Listi ("List1"). Obseg ("A1"). Vrednost = TextBox1.VrednostEnd Sub |
Morda boste želeli vnesti tudi kodo za preverjanje, ali uporabnik ne vnaša smeti, kar bo imelo katastrofalne učinke na vašo prijavo
Dogodek spremembe ni dober za to, ker se pokliče vsakič, ko uporabnik vnese nov znak. Uporabnik bi lahko začel vnašati niz besedila in takoj ugotoviti, da je kršil vaša pravila preverjanja, preden dokonča veljavno besedilo.
Uporabite dogodek »Izhod«. To se sproži, ko uporabnik premakne fokus na drug kontrolnik na obrazcu, kar pomeni, da uporabnik ne vnaša več podatkov.
123456 | Private Sub TextBox1_Exit (ByVal Cancel As MSForms.ReturnBoolean)Če je IsNull (TextBox1.Value) Ali Len (TextBox1.Value) <4 PotemMsgBox "Ime je neveljavno", vbCriticalTextBox1.SetFocusKonec ČeEnd Sub |
Ko uporabnik klikne na drug kontrolnik na obrazcu, ta koda preizkusi ničelno vrednost v besedilnem polju ali manj kot 4 znake. Če je test resničen, se prikaže sporočilo s kritično ikono, ki obvesti uporabnika, da je ime neveljavno, in fokus se premakne nazaj v besedilno polje, ki ga uporabnik popravi.
Upoštevajte, da se bo tudi, če uporabnik klikne gumb Izhod, najprej izvedel izhod iz polja z besedilom, zato to prepreči izhod uporabnika brez popravljanja vnosa
Inicializirajte in aktivirajte dogodke na obrazcu
Ko VBA prvič ustvari in sestavi obrazec, sproži dogodek »Inicializiraj«. Ker pa je obrazec prikazan tudi na tej točki, sproži tudi dogodek »Aktiviraj«. Od takrat naprej se vsakič, ko se obrazec prikaže z uporabo metode »Pokaži« ali se pojavi kot del hierarhije obrazcev, sproži dogodek »Aktiviraj«, ne pa dogodka »Inicializiraj«
Dogodek »Initialize« se zgodi samo enkrat, dogodek »Activate« pa se lahko zgodi večkrat
Na obrazcu boste morda želeli nastaviti privzete vrednosti z delovnega lista v vnosnih kontrolnikih, npr. besedilna polja, tako da se pojavijo ob prvi uporabi obrazca, vendar lahko uporabnik prepiše privzete vrednosti in te nove vrednosti ostanejo na mestu, dokler je koda v teku
12345678 | Zasebni podporabnikForm_Initialize ()TextBox1.Value = Listi ("List1"). Obseg ("A1"). VrednostČe je TextBox1.Value = ”” PotemTextBox1.Visible = FalseSicer paTextBox1.Visible = TrueKonec ČeEnd Sub |
Dogodek »Inicializiraj« najdete v drugem spustnem meniju v oknu za kodo, ime uporabniške oblike pa v prvem spustnem.
Ta koda bo kot privzeto vrednost v besedilnem polju, ustvarjenem prej v tem članku, uporabila vrednost v celici A1 na "listu 1". Ko se obrazec prikaže prvič, se prikaže privzeta vrednost. Uporabnik lahko nato prepiše privzeto vrednost in to bo ohranjeno. Če je CellA1 prazno, bo polje z besedilom skrito, sicer bo vidno
Privzeta vrednost je lahko tudi trdo kodirana:
1 | TextBox1.Value = “John Smith” |
Morda boste želeli tudi zagotoviti, da se vrednosti, ki jih je vnesel uporabnik, znova pojavijo, ko uporabnik zažene ta obrazec v določeni seji programa Excel. Koda VBA lahko preprosto zapiše vrednosti nazaj v celice v delovnem zvezku z dogodkom »Izhod« na kontrolniku in jih znova namesti z dogodkom »Aktiviraj« na obrazcu
123 | Private Sub TextBox1_Exit (ByVal Cancel as MSForms.ReturnBoolean)Listi ("List1"). Obseg ("A10"). Vrednost = TextBox1.VrednostEnd Sub |
123 | Zasebni pod -uporabniški obrazec_Activate ()TextBox1.Value = Listi ("List1"). Obseg ("A10"). VrednostEnd Sub |
Ta koda bo uporabnikove vrednosti obdržala in zagotovila, da bodo shranjene v preostalem delovnem zvezku
Shranjevanje vaše prijave in obrazcev
Ko shranite Excelov delovni zvezek, ki vsebuje vaše obrazce, se shranijo tudi vsi obrazci in njihova koda VBA. Vse vrednosti, ki jih imajo obrazci, medtem ko so prikazane, bodo izgubljene.
Pomembno je, da kodo napišete tako, da se ob izhodu iz delovnega zvezka ali obrazca vrednosti zapišejo nazaj v celice v delovnem zvezku in se tako ohranijo.
Modalne in nemodalne oblike
Sam obrazec ima lastnost 'Show Modal'. To je privzeto nastavljeno na True, lahko pa ga spremenite na False (nemodalno)
Če je obrazec modalni, to pomeni, da med prikazom obrazca ni mogoče dostopati do nobene od Excelovih funkcij. To vključuje vašo kodo v oknu VBE. Kodo si lahko ogledate, vendar sta kazalec in tipkovnica onemogočena.
V nemodalni obliki lahko med prikazom obrazca dostopate do vseh funkcij programa Excel, vključno z oknom VBE.
To je pomembno z vidika nadzora vedenja uporabnikov
Zapiranje obrazca
Kakorkoli dobro napišete kodo, da uporabnika prisilite po določeni poti, jo lahko preprosto zaobidejo s klikom na gumb »Zapri« X v zgornjem desnem kotu obrazca
To lahko preprečite tako, da spremenite dogodek »QueryClose« obrazca
1234 | Private Sub UserForm_QueryClose (Prekliči kot celo število, Zapri način kot celo število)Prekliči = resMsgBox "To dejanje je onemogočeno"End Sub |
Dogodek »QueryClose« se sproži, ko uporabnik klikne »Zapri« X obrazca. Ta koda prekliče dejanje, zato je uporabnik prisiljen uporabiti vaš gumb »Izhod« in kodo, ki jo imate za seboj.
Omogočanje in onemogočanje kontrol
Vsi kontrolniki na vašem obrazcu imajo lastnost »Omogočeno«, ki je nastavljena na True ali False. Če je napačno, je nadzor zatemnjen. To je mogoče videti, vendar je ni mogoče uporabiti.
Obstaja tudi lastnost, imenovana "Vidno", ki je spet nastavljena na True ali False.
Kodo lahko napišete tako, da bo določen nadzor neuporaben ali pa bo uporabniku popolnoma neviden. Z izjavo »Če« lahko izberete okoliščine, ko morate to narediti
Gumb »Izhod« lahko na primer onemogočite, dokler uporabnik ne vnese vrednosti v polje TextBox1 (ime)
123 | Zasebni podporabnikForm_Initialize ()CommandButton1.Enabled = FalseEnd Sub |
1234567 | Zasebni podnapis TextBox1_Change ()Če je Len (TextBox1.Value)> 0 PotemCommandButton1.Enabled = TrueSicer paCommandButton1.Enabled = FalseKonec ČeEnd Sub |
Ta koda uporablja obrazec 'Initialize' dogodek, da onemogoči izhodni gumb (ukazni gumb 1), ko se obrazec prvič prikaže, nato pa uporabi dogodek 'Change' na TextBox1 (ime), da omogoči gumb za izhod, če je bilo kaj vneseno ali onemogočeno to, če je polje prazno.
Dogodek »Spremeni« se sproži vsakič, ko vnesete nov znak ali ga izbrišete iz besedilnega polja. Če uporabnik poskuša vnesti besedilo, da gumb omogoči, nato pa izbriše vse besedilo, bo gumb takoj onemogočen