Ustvarjanje uporabniških oblik VBA

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

Vam bo pomagal razvoj spletnega mesta, ki si delijo stran s svojimi prijatelji

wave wave wave wave wave