Stvaranje VBA korisničkih oblika

Korisnički oblici VBA

Userform je vrlo važan dio programiranja u VBA -i. Omogućuje vam stvaranje korisničkog sučelja profesionalnog izgleda za komunikaciju s korisnicima vaše VBA aplikacije. Također vam omogućuje potpunu kontrolu korisnika u onome što rade s vašom radnom knjigom.

Naravno, možete koristiti ćelije radnog lista za prihvaćanje parametara od korisnika, ali korisnički oblik proizvodi daleko bolje korisničko iskustvo.

Proširivanjem visine i širine vašeg korisničkog obrasca na veličinu Excel prozora, možete učiniti da vaša aplikacija izgleda kao normalna Windows aplikacija, pri čemu korisnik potpuno nije svjestan da koristi Excel kao host.

Dostupne su vam sve uobičajene kontrole sustava Windows, kao što su padajući izbornici, okviri s popisima, okviri s kvačicama. Također imate ogroman raspon metoda, događaja i svojstava koje možete koristiti za poboljšanje korisničkog iskustva.

Važna stvar je da kada prikazujete korisnički obrazac koji je ugrađen ili modalni, ne možete uređivati ​​svoj kôd u VBE -u niti pristupiti bilo kojoj Excel funkciji. Tek kada se obrazac zatvori, kursor će se pojaviti u vašem kodu.

Ugrađeni VBA korisnički oblici

Excel VBA kao nekoliko ugrađenih obrazaca koji se mogu koristiti za komunikaciju s korisnikom.

Okvir za poruke

Ovo je najčešće korišteni oblik u VBA -i. Jednostavno prikazuje tekstualnu poruku, eventualno obavješćujući korisnika da je unio neispravan unos ili da je VBA proces dovršen. U svom najjednostavnijem obliku, oni prikazuju tekstualni niz, ali možete dodati i ikonu poput pitanja ili uskličnika te okvir za poruku dati drugačiji naslov.

Ovo je osnovni primjer. Postoji samo jedan gumb za klik, a naslovna traka kaže "Microsoft Excel"

Kôd za ovo je vrlo jednostavan:

123 PodispitMsgBox ()MsgBox "Ovaj je proces dovršen"Kraj podm

Možete koristiti različite parametre za dodavanje gumba, ikona i promjenu naslovne trake

123456789 PodispitMsgBox ()Dim Ret kao varijantaRet = MsgBox ("Jeste li sigurni?", VbYesNo Ili vbQuestion, "Moja aplikacija")Ako je Ret = vbDa»Vaš postupak ovdjeDrugoIzlaz iz podvZavrši akoKraj podm

Ovaj kôd dodaje gumb "Da" i "Ne" i ikonu upitnika te postavlja naslovnu traku. Imajte na umu da stilove okvira s porukom možete kombinirati pomoću operatora 'Ili'

Također, kada vraćate vrijednost iz okvira za poruku, povratna varijabla mora biti definirana kao varijanta ili vbMsgBoxResult, a izraz okvira za poruku mora koristiti zagrade,

Okvir za unos

Postoji vrlo jednostavan okvir za unos ugrađen u VBA, iako je prilično ograničen u onome što s njim možete učiniti. Ako možete, bolje je dizajnirati prilagođeni korisnički oblik

12345 Pod TestInputBox ()Dim Ret kao nizRet = InputBox ("Molimo unesite svoje ime", "Unesite ime")MsgBox RetKraj podm

Također možete dodati zadanu vrijednost za ulaz u parametre.

Nabavite otvoreni naziv datoteke

To vam omogućuje korištenje dijaloškog okvira za Windows datoteke unutar vašeg VBA koda. Korisniku izgleda vrlo impresivno dok je pokrenut, ali ga je vrlo jednostavno ugraditi i s njim automatski dobivate sve mogućnosti dijaloga datoteka.

Kôd ograničava korisnika da vidi samo Excel datoteke. Nažalost, mogli bi upisati naziv datoteke koja nije Excel, u okvir Naziv datoteke, i kliknuti gumb za otvaranje pa će vam trebati neki kôd kako biste bili sigurni da je odabrana Excel datoteka.

Pomoću naredbe ‘ChDir’ promijenite zadani direktorij prema vlastitim zahtjevima prije prikaza dijaloga datoteke

Obratite pozornost na korištenje zamjenskih znakova u parametru FileFilter. Excel datoteke za prikaz mogle bi biti prije 2007., imati makronaredbe ili biti binarne pa je filtar ".xls*".

123456 Sub TestFileDialog ()Dim MyFile As StringChDir "C: \ temp"MyFile = Application.GetOpenFilename ("Excel datoteke (*.xls*),*. Xls*", "Odaberite datoteku")MsgBox MyFileKraj podm

Ako je potrebno, možete dopustiti korisniku da odabere nekoliko datoteka odjednom pomoću parametra MultiSelect. Zadana je vrijednost Netačno (samo jedan odabir)

12345678 Sub TestFileDialog ()Zatamni MyFile kao varijantuChDir "C: \ temp"MyFile = Application.GetOpenFilename ("Excel datoteke (*.xls*),*. Xls*",, "Odaberite datoteku",, True)Za svaki f U MyFileMsgBox fDalje fKraj podm

Korisnik u dijaloškom okviru datoteke drži pritisnutu tipku Shift za odabir više datoteka.

Petlja Za svaku prikazuje puni put i naziv svake odabrane datoteke

Zadani dijalozi programa Excel

Unutar programa Excel VBA postoji zbirka Dijalozi koju možete koristiti za prikaz bilo kojeg standardnog dijaloga programa Excel. Nedostatak je to što ne možete pristupiti parametrima koje je korisnik odabrao ili promijeniti izgled dijaloga, ali ti dijalozi mogu biti korisni u usmjeravanju korisnika na standardnu ​​Excel funkciju i omogućavanju odabira određenih parametara unutar dijaloga.

Dobar primjer za to je prikaz dijaloga "Ispis" iz VBA -e:

123 Pod TestPrintDialog ()Primjena.Dijalozi (xlDialogPrint) .PrikažiKraj podm

Kad otvorite zagrade u zbirci Dialogs, vidjet ćete popis ogromnog broja konstanti za ugrađene dijaloge. Vrijedi eksperimentirati s nekim od ovih opcija u vašem kodu

Umetanje novog korisničkog obrasca

Možete oblikovati vlastite prilagođene korisničke obrasce umetanjem korisničkog oblika u uređivač Visual Basic (VBE)

To činite odabirom Umetni | UserForm na traci izbornika VBE.

Kliknite na "Korisnički obrazac" i pojavit će se novi prazan obrazac spreman za razvoj

Sam obrazac (prikazan kao "UserForm1") izgleda prilično mali, ali možete upotrijebiti ručice oko njega za povećanje ili smanjenje čak i povlačenjem ručica pokazivačem.

U donjem lijevom kutu zaslona nalazi se prozor svojstava. Kako je fokus izravno na samom obrascu, on sadrži sva svojstva forme specifična za taj obrazac.

Imajte na umu da kada počnete dodavati kontrole, kao što su kombinirani okviri i naredbeni gumbi, sve te kontrole imaju svoj skup svojstava i mogu se jako razlikovati u tome što možete učiniti sa svakim od njih.

Svojstva koja trenutno vidite primjenjuju se samo na sam obrazac.

Svojstvo ‘Name’ naziv je za definiranje vašeg objekta obrasca unutar VBA koda. Možda ćete htjeti upotrijebiti nešto značajnije za naziv objekta, tako da prilikom pregledavanja koda bude očito koji se oblik koristi.

Svojstvo "Ime" također će se odraziti na prozor "Project Explorer" u gornjem lijevom kutu zaslona

Naslovnu traku svog obrasca htjet ćete promijeniti u nešto drugačije od "UserForm1", a to možete učiniti upisivanjem novog teksta na svojstvu "Caption"

Možete napraviti veliki broj promjena u načinu na koji korisnik vidi vaš obrazac. Možete mijenjati boje, dodavati slike, npr. korporativni logotip, promijenite položaj pomoću "Lijevo" i "Gore", promijenite veličinu pomoću "Visina" i "Širina", promijenite pokazivač miša i još mnogo toga

Sva ta svojstva također se mogu programski promijeniti za bilo koju kontrolu koju ste dodali u obrazac. Na primjer, korisnik može odabrati kontrolu iz okvira s popisom, a možda ćete htjeti onemogućiti ili sakriti druge kontrole na temelju korisnikova izbora

Korištenje Toolbox -a

Primijetit ćete da kada kliknete na sam obrazac, pojavljuje se skočni prozor s alatom. Ako kliknete bilo gdje drugdje, npr. oknu svojstava, nestat će, ali će se ponovno pojaviti kada kliknete na obrazac.

Okvir alata pruža stvarnu mehaniku dizajna obrasca. To vam omogućuje da u obrazac dodate normalne kontrole sustava Windows koje su korisnicima poznate.

Primjetit ćete da na obrascu postoji mreža točkica. Ovo je 'snapgrid' pa će, kad u obrazac dodate kontrolu, automatski poravnati položaj s retcima i stupcima točaka. To uvelike pomaže u usklađivanju vaših kontrola kako ne biste dobili grub izgled kontrola

Ako kliknete na kontrolu, a zatim odlučite da je nećete koristiti, klikom na ikonu ‘Strelica’ u gornjem lijevom kutu okvira s alatima kursor ćete vratiti u normalu.

Okviru alata možete dodati dodatne kontrole pomoću alata | Dodatne kontrole na izborniku VBE. Dostupan je znatan broj njih, ali ovisno o verzijama sustava Windows i Excel, ne rade uvijek pa je često potrebno malo eksperimentiranja.

Također, vaši korisnici možda nemaju pristup nekim od ovih dodatnih kontrola ili imaju starije verzije sustava Windows i Excel, što može uzrokovati probleme. U velikim organizacijama, osobito ako su globalne, ne postoji standardno računalo na koje se možete osloniti!

Dodavanje gumba za izlaz u obrazac

Gumb Command jednostavno je dodati u obrazac. Ovo izgleda isto kao i gumbi koje vidite u drugim Windows obrascima, obično kao gumb "U redu" ili "Odustani".

Kliknite na ikonu naredbenog gumba u okviru s alatima. Ovo je druga ikona slijeva u donjem redu ikona. Pogledajte gornju sliku. Na sebi ima slova 'ab'.

Možete držati pritisnutu tipku miša i povući kontrolu na obrazac, ili možete pomaknuti pokazivač na obrazac, gdje će se promijeniti u "križni" pokazivač, a vi možete postaviti i veličinu gumba

Ako povučete kontrolu u obrazac, dobit ćete zadanu veličinu gumba. Pomicanjem pokazivača na obrazac možete promijeniti veličinu gumba povlačenjem pokazivača "križ" preko obrasca

Vaš će obrazac sada izgledati ovako:

Gumb će imati standardni tekst kao naslov, ali ćete ga htjeti promijeniti prema vlastitim zahtjevima. Možete kliknuti na tekst unutar gumba ('CommandButton1') i to će vam omogućiti izravno uređivanje naslova.

Također ga možete promijeniti u prozoru svojstava (donji lijevi kut zaslona). Vidjet ćete svojstvo pod nazivom "Caption" i za to možete urediti vrijednost. Promijenite ovo u "Izlaz"

Kao i kod svojstava obrasca, svojstvo ‘Ime’ definira naziv koji će se koristiti u vašem VBA kodu. Možda ćete htjeti koristiti naziv koji je smisleniji i očigledniji u vašem kodu. To možete unijeti protiv svojstva "Ime".

Gumb možete ponovno postaviti povlačenjem po obrascu, a veličinu mu možete promijeniti klikom na ručke gumba (bijeli kvadratni okviri) i povlačenjem ručica kako biste ih povećali ili smanjili

Gumb možete promijeniti i promjenom vrijednosti visine i širine u prozoru svojstava

Obrazac u Excelu možete pregledati klikom na zeleni trokut na alatnoj traci VBE ili pritiskom na F5

Obrazac možete pozvati iz VBA koda unutar modula pomoću metode 'Prikaži'

123 Sub ShowForm ()Korisnički obrazac1.PrikažiKraj podm

Vaš korisnički obrazac zapravo je globalni objekt i može se pozvati s bilo kojeg mjesta u vašem kodu

Trenutačno vaš naredbeni gumb ne radi ništa jer iza njega nema VBA koda. Ovo morate sami napisati! Sve što se trenutno može dogoditi je da možete kliknuti na "Zatvori" X u gornjem desnom kutu obrasca.

Za dodavanje VBA koda dvaput kliknite gumb na obrascu

Ovo će vas odvesti u uobičajeni prozor VBA koda i prikazat će zadani događaj klika.

Za zatvaranje obrasca koristite metodu ‘Sakrij’, a možete dodati i bilo koji drugi kôd, poput okvira s porukom kako biste korisniku potvrdili što se dogodilo.

Imajte na umu da prozor koda ima dva padajuća izbornika na vrhu. Prvi vam omogućuje odabir kontrola obrasca, a drugi prikazuje sve događaje koji su vam dostupni za dodavanje koda. Očigledan za gumb je događaj "Click", ali postoje i drugi, poput "Double Click" ili "Mouse Move"

Kad sada pokrenete obrazac, gumb zapravo čini nešto. Obrazac nestaje i prikazuje se okvir s porukom koji potvrđuje da je obrazac zatvoren

Naravno, možete povećati izlaznu šifru. Možda ćete htjeti prikazati drugi obrazac ili poduzeti radnje na parametrima koje je korisnik unio u vaš obrazac

Dodavanje kontrole oznaka u obrazac

Kontrole oznaka služe za postavljanje upita korisniku kakve podatke trebaju unijeti u kontrolu na obrascu, npr. tekstualni okvir, padajući izbornik itd. Oznaka prema zadanim postavkama nema granica, ali se po potrebi mogu dodati kroz prozor svojstava.

Kao kontrola, čitaju se samo korisniku i jednostavno su način stavljanja teksta na obrazac, bilo da se radi o podebljanom naslovu ili uputi što unijeti ili odabrati.

Da biste dodali oznaku, kliknite ikonu "A" u alatnoj traci (gornji redak, drugi slijeva) i dvaput kliknite na nju ili pomaknite pokazivač na obrazac i odaberite položaj i veličinu.

Pomoću svojstva ‘Caption’ u prozoru svojstava ili klikom na kontrolu oznake možete unijeti tekst kontrole oznake.

Imajte na umu da će se tekst prelomiti u skladu s veličinom kontrole naljepnice, a ako je niz teksta predug, neće se pojaviti u potpunosti na obrascu, stoga morate paziti na veličinu kontrole naljepnice.

Pomoću prozora svojstava možete promijeniti izgled kontrole naljepnice s različitim bojama, fontovima, stilom leđa, npr. ako prekriva sliku i želite da bude prozirna

Za kontrolu oznaka nije potrebno stvoriti kôd. Glavna svrha je dodavanje teksta u obrazac tako da korisnik može vidjeti kako funkcioniraju sve ostale kontrole

Dodavanje kontrole teksta u obrazac

Tekstna kontrola koristi se kako bi se korisniku omogućilo unos teksta, npr. Unos imena ili komentara

Tekstna kontrola dodaje se iz okvira s alatima klikom na ikonu kontrole teksta (gornji redak, treći slijeva) i dvostrukim klikom ili povlačenjem kontrole na mjesto u obrascu.

Kontrola teksta često se miješa s kontrolom oznake, ali tekstualna kontrola je ona za korisnički unos

Tekst "Unesite svoje ime" kontrola je oznake, kako je prethodno opisano, a sada imamo bijeli okvir za tekst spreman za korisnika da upiše nešto u

Pomoću prozora svojstava možete promijeniti boje, fontove, posebne efekte ili upotrijebiti znakove lozinke za tekstni okvir. Dostupna je velika fleksibilnost

Jedno vrlo važno svojstvo tekstualnog okvira je svojstvo 'MultiLine'. Ako želite da korisnik unese veliku količinu teksta u kontrolu teksta, npr. komentara, tada svojstvo ‘MultiLine’ mora biti postavljeno na True.

Zadana vrijednost je Netačno, što znači da koliko god veliki tekstni okvir učinili, uneseni tekst ostat će u jednom neprekinutom retku i pomaknut će se izvan okvira za tekst. Neće se omotati unutar kutije.

Ne postoji skočni prozor kada desnom tipkom miša kliknete tekstualni okvir dok je pokrenut, ali CTRL+V će raditi za Zalijepi, a CTRL+C za Izreži, ako korisnik želi izrezati i zalijepiti tekst u i iz drugih aplikacije

Opet, morate napisati vlastiti kôd za rad s tekstom koji je korisnik upisao. Možda ćete ga htjeti prenijeti u ćeliju na radnom listu

Ovaj kôd možete dodati u događaj "Promijeni" za tekstualni okvir

123 Privatni pod TextBox1_Change ()Tablice ("List1"). Raspon ("A1"). Vrijednost = TextBox1.VrijednostKraj podm

Možda biste također htjeli unijeti neki kôd za provjeru kako biste provjerili da korisnik ne unosi smeće što će imati katastrofalne učinke na vašu aplikaciju

Događaj promjene nije dobar za to jer se poziva svaki put kada korisnik upiše novi znak. Korisnik bi mogao početi upisivati ​​niz teksta i odmah otkriti da je prekršio vaša pravila provjere valjanosti prije nego što dovrši valjani tekst.

Koristite događaj "Izlaz". To se aktivira kada korisnik premjesti fokus na drugu kontrolu na obrascu, što znači da korisnik više ne unosi podatke.

123456 Privatni pod TextBox1_Exit (ByVal Cancel As MSForms.ReturnBoolean)Ako je IsNull (TextBox1.Value) Ili Len (TextBox1.Value) <4 TadaMsgBox "Ime je nevažeće", vbCriticalTextBox1.SetFocusZavrši akoKraj podm

Kada korisnik klikne drugu kontrolu na obrascu, ovaj kôd provjerava ima li null vrijednost u tekstualnom okviru ili ima manje od 4 znaka. Ako je test istinit, tada će se pojaviti okvir s porukom s kritičnom ikonom koji obavještava korisnika da je ime nevažeće, a fokus se pomiče natrag u tekstni okvir koji korisnik može ispraviti.

Imajte na umu da će se, čak i ako korisnik klikne gumb Izlaz, prvo izvršiti izlaz iz tekstualnog okvira, pa se time sprječava izlaz korisnika bez ispravljanja unosa

Pokretanje i aktiviranje događaja na obrascu

Kad VBA prvi put kreira i izgradi obrazac, pokreće događaj 'Inicijaliziraj'. No, budući da se obrazac također prikazuje u ovom trenutku, on također pokreće događaj "Aktiviraj". Od tada pa nadalje, svaki put kada se obrazac pojavi metodom "Prikaži" ili se pojavi kao dio hijerarhije obrazaca, tada se pokreće događaj "Aktiviraj", ali ne i događaj "Inicijaliziraj"

Događaj 'Initialize' događa se samo jednom, ali se događaj 'Activate' može dogoditi više puta

Na svom obrascu možda želite postaviti zadane vrijednosti s radnog lista u kontrolama unosa, npr. tekstualne okvire, tako da se oni pojavljuju pri prvom korištenju obrasca, ali korisnik može prebrisati zadane postavke i te nove vrijednosti ostat će na mjestu sve dok je kôd pokrenut

12345678 Privatni pomoćni korisnički obrazac_Initialize ()TextBox1.Value = Tablice ("List1"). Raspon ("A1"). VrijednostAko je TextBox1.Value = ”” TadaTextBox1.Visible = FalseDrugoTextBox1.Visible = TačnoZavrši akoKraj podm

Događaj 'Initialize' možete pronaći u drugom padajućem izborniku u prozoru koda, a naziv korisničkog obrasca u prvom padajućem izborniku.

Ovaj će kôd koristiti vrijednost u ćeliji A1 na "Sheet1" kao zadanu vrijednost u tekstualnom okviru stvorenom ranije u ovom članku. Kad se obrazac prvi put pojavi, pojavit će se zadana vrijednost. Korisnik tada može prebrisati zadanu vrijednost i to će se zadržati. Ako je CellA1 prazan, okvir za tekst bit će skriven, u protivnom će biti vidljiv

Zadana vrijednost također se može teško kodirati:

1 TextBox1.Value = “John Smith”

Također biste mogli htjeti provjeriti da li se vrijednosti koje je korisnik unio ponovno pojavljuju svaki put kada korisnik pokrene taj obrazac unutar te određene sesije programa Excel. VBA kôd može lako zapisati vrijednosti natrag u ćelije u radnoj knjizi pomoću događaja "Izlaz" na kontroli i ponovno ih instalirati pomoću događaja "Aktiviraj" na obrascu

123 Private Sub TextBox1_Exit (ByVal Cancel as MSForms.ReturnBoolean)Listovi ("List 1"). Raspon ("A10"). Vrijednost = TextBox1.VrijednostKraj podm
123 Privatni pod -korisnički obrazac_Activate ()TextBox1.Value = Tablice ("List1"). Raspon ("A10"). VrijednostKraj podm

Ovaj kôd učinit će korisnikove vrijednosti trajnim, a također će osigurati njihovo spremanje s ostatkom radne knjige

Spremanje vaše prijave i obrazaca

Kad spremite Excel radnu knjigu koja sadrži vaše obrasce, spremaju se i svi obrasci i njihov VBA kôd. Međutim, sve vrijednosti koje obrasci drže dok su prikazane bit će izgubljene.

Važno je napisati kôd tako da kada korisnik izađe iz radne knjige ili obrasca, vrijednosti se vrate u ćelije unutar radne knjige i tako sačuvaju.

Modalni i nemodalni oblici

Sam obrazac ima svojstvo 'Prikaži modal'. To je prema zadanim postavkama postavljeno na True, ali se može promijeniti u False (nemodalno)

Ako je obrazac modalni, to znači da se nijedna Excel funkcija ne može pristupiti dok se obrazac prikazuje. To uključuje vaš kôd u prozoru VBE. Možete vidjeti kôd, ali pokazivač i tipkovnica su onemogućeni.

U nemodalnom obliku možete pristupiti svim funkcijama programa Excel, uključujući prozor VBE, dok se obrazac prikazuje.

To je važno sa stajališta kontrole ponašanja korisnika

Zatvaranje obrasca

Koliko god dobro napisali svoj kôd da biste natjerali korisnika da siđe na određenu rutu, oni ga lako mogu zaobići klikom na "Zatvori" X u gornjem desnom kutu obrasca

To možete spriječiti promjenom događaja 'QueryClose' u obrascu

1234 Privatni pomoćni korisnički obrazac_QueryClose (Otkaži kao cijeli broj, Zatvori način kao cijeli broj)Odustani = IstinaMsgBox "Ova radnja je onemogućena"Kraj podm

Događaj "QueryClose" pokreće se kada korisnik klikne na "Zatvori" X obrasca. Ovaj kôd poništava radnju, pa je korisnik prisiljen koristiti vašu tipku "Izlaz" i kôd koji imate iza sebe.

Omogućavanje i onemogućavanje kontrola

Sve kontrole na vašem obrascu imaju svojstvo pod nazivom "Omogućeno" koje je postavljeno na Tačno ili Netačno. Ako je netočno, kontrola je zasivljena. Može se vidjeti, ali se ne može koristiti.

Postoji i svojstvo pod nazivom "Vidljivo" koje je opet postavljeno na Tačno ili Netačno.

Možete napisati kôd kako biste određenu kontrolu učinili neupotrebljivom ili je učinili potpuno nevidljivom za korisnika. Pomoću izjave "Ako" možete odabrati okolnosti u kojima to trebate učiniti

Na primjer, u početku biste mogli onemogućiti gumb "Izlaz", sve dok korisnik ne unese vrijednost u TextBox1 (naziv)

123 Privatni pomoćni korisnički obrazac_Initialize ()CommandButton1.Enabled = NetačnoKraj podm
1234567 Privatni pod TextBox1_Change ()Ako je Len (TextBox1.Vrednost)> 0 TadaCommandButton1.Enabled = IstinaDrugoCommandButton1.Enabled = NetačnoZavrši akoKraj podm

Ovaj kôd koristi obrazac "Initialize" događaj za onemogućavanje izlaznog gumba (Command Button 1) pri prvom pojavljivanju obrasca, a zatim koristi događaj "Change" na TextBox1 (naziv) kako bi omogućio gumb Exit ako je nešto upisano ili onemogućeno to ako je okvir prazan.

Događaj "Promjena" pokreće se svaki put kada se novi znak upiše ili izbriše iz okvira za tekst. Ako korisnik pokuša unijeti tekst kako bi gumb bio omogućen, a zatim izbriše sav tekst, gumb će se odmah onemogućiti

wave wave wave wave wave