VBA kasutajavormide loomine

Lang L: none (table-of-contents)

VBA kasutajavormid

Userform on VBA programmeerimisel väga oluline osa. See võimaldab teil luua professionaalse välimusega kasutajaliidese, et suhelda oma VBA rakenduse kasutajatega. See võimaldab teil ka täielikult kontrollida kasutajat selles, mida ta teie töövihikuga teeb.

Loomulikult saate kasutajalt parameetrite vastuvõtmiseks kasutada töölehe lahtreid, kuid kasutajavorm loob palju parema kasutuskogemuse.

Laiendades oma kasutajavormi kõrguse ja laiuse Exceli akna suuruseks, saate muuta oma rakenduse tavalise Windowsi rakenduse sarnaseks, ilma et kasutaja oleks täiesti teadlik, et kasutab hostina Exceli.

Teile on saadaval kõik tavalised Windowsi juhtelemendid, näiteks rippmenüüd, loendikastid ja linnukesed. Teil on ka tohutu valik meetodeid, sündmusi ja atribuute, mida kasutajakogemuse parandamiseks kasutada.

Oluline on see, et kui kuvate sisseehitatud või modaalset kasutajavormi, ei saa te oma koodi VBE -s redigeerida ega Exceli funktsioonidele juurde pääseda. Kursor kuvatakse teie koodis alles siis, kui vorm on suletud.

Sisseehitatud VBA kasutajavormid

Excel VBA kui mitu sisseehitatud vormi, mida saab kasutada kasutajaga suhtlemiseks.

Sõnumikast

See on VBA -s kõige sagedamini kasutatav vorm. See kuvab lihtsalt tekstisõnumi, mis võib -olla teavitab kasutajat, et ta on sisestanud vale sisendi või et VBA -protsess on lõpetatud. Lihtsaimal kujul kuvavad nad tekstistringi, kuid saate lisada ka ikooni, näiteks küsimuse või hüüumärgi, ja anda sõnumikastile teise pealkirja.

See on põhinäide. Klõpsamiseks on ainult üks nupp ja tiitliriba ütleb „Microsoft Excel”

Kood selle tootmiseks on väga lihtne:

123 AlamkatseMsgBox ()MsgBox "See protsess on lõpule viidud"End Sub

Nuppude, ikoonide lisamiseks ja tiitliriba muutmiseks saate kasutada erinevaid parameetreid

123456789 AlamkatseMsgBox ()Dim Ret VariantinaRet = MsgBox ("Kas olete kindel?", VbYesNo Või vbQuestion, "Minu rakendus")Kui Ret = vbJah siis'Teie protsess siinMuiduVälju subLõpp KuiEnd Sub

See kood lisab nupud „Jah” ja „Ei” ja küsimärgi ikooni ning määrab tiitliriba. Pange tähele, et saate ühendada sõnumikasti stiile, kasutades operaatorit „Või”

Samuti, kui tagastate väärtuse sõnumikastist, tuleb tagastamismuutuja määratleda variandina või vbMsgBoxResult ja sõnumikasti avalduses kasutada sulgusid,

Sisendkast

VBA -sse on sisse ehitatud väga lihtne sisendkast, kuigi see on sellega üsna piiratud. Kui saate, on parem kujundada kohandatud kasutajavorm

12345 Sub TestInputBox ()Dim Ret stringinaRet = InputBox ("Palun sisestage oma nimi", "Sisestage nimi")MsgBox RetEnd Sub

Samuti saate parameetritesse lisada sisendi vaikeväärtuse.

Hankige avatud failinimi

See võimaldab teil VBA -koodis kasutada Windowsi failidialoogi. See tundub kasutajale töötamise ajal väga muljetavaldav, kuid selle lisamine on väga lihtne ja saate automaatselt kõik failidialoogi funktsioonid.

Kood piirab kasutajat ainult Exceli failide nägemisega. Kahjuks võisid nad sisestada väljale Faili nimi mitte-Exceli failinime ja klõpsata avamisnupul, nii et teil oleks vaja mõnda koodi, et veenduda Exceli faili valimises.

Enne failidialoogi kuvamist kasutage käsku „ChDir”, et muuta vaikekataloog vastavalt teie vajadustele

Pange tähele metamärkide kasutamist parameetris FileFilter. Kuvatavad Exceli failid võivad olla enne 2007. aastat, neil võivad olla makrod või need võivad olla binaarsed, nii et filter on „.xls*”.

123456 Sub TestFileDialog ()Dim MyFile kui stringChDir "C: \ temp"MyFile = Application.GetOpenFilename ("Exceli failid (*.xls*),*. Xls*", "Vali fail")MsgBox MyFileEnd Sub

Vajadusel saate lubada kasutajal valida mitu faili korraga, kasutades parameetrit MultiSelect. Vaikimisi on vale (ainult ühe valiku korral)

12345678 Sub TestFileDialog ()Dim MyFile kui variantChDir "C: \ temp"MyFile = Application.GetOpenFilename ("Exceli failid (*.xls*),*. Xls*", "Vali fail",, True)Iga f Minu failisMsgBox fJärgmine fEnd Sub

Mitme faili valimiseks hoiab kasutaja failidialoogis all tõstuklahvi.

Iga silmuse jaoks kuvatakse iga valitud faili täielik tee ja nimi

Exceli vaikedialoogid

Exceli VBA -s on dialoogikogu, mille abil saate kuvada mis tahes tavalise Exceli dialoogi. Negatiivne külg on see, et te ei pääse juurde kasutaja valitud parameetritele ega muuta dialoogi välimust, kuid need dialoogid võivad olla kasulikud kasutaja suunamisel tavalisele Exceli funktsioonile ja võimaldades neil dialoogis konkreetseid parameetreid valida.

Hea näide sellest on VBA dialoogi „Prindi” kuvamine:

123 Sub TestPrintDialog ()Application.Dialogs (xlDialogPrint). NäitaEnd Sub

Dialoogide kollektsiooni sulgude avamisel näete sisseehitatud dialoogide jaoks tohutul hulgal konstante. Tasub katsetada mõningaid neid võimalusi oma koodis

Uue kasutaja vormi sisestamine

Saate kujundada oma kohandatud kasutajavorme, sisestades kasutajavormi Visual Basic Editorisse (VBE)

Selleks valige Lisa | UserForm VBE menüüribal.

Klõpsake "UserForm" ja ilmub uus tühi vorm, mis on valmis arendamiseks

Tegelik vorm (näidatud kui „UserForm1”) tundub üsna väike, kuid saate selle ümber olevate käepidemete abil kursorit suurendades või veelgi väiksemaks muuta.

Ekraani vasakus alanurgas on atribuutide aken. Kuna fookus on otseselt vormil endal, sisaldab see selle vormi kõiki omadusi.

Pange tähele, et kui hakkate lisama selliseid juhtelemente nagu liitkastid ja käsunupud, on neil juhtelementidel oma omaduste komplekt ja need võivad olla igaühega väga erinevad.

Praegu kuvatavad atribuudid kehtivad ainult vormi enda kohta.

Atribuut „Nimi” on nimi, mida kasutatakse teie vormiobjekti määratlemiseks VBA -koodis. Võib -olla soovite objekti nime jaoks kasutada midagi sisukamat, nii et kui vaatate oma koodi üle, on ilmne, millist vormi kasutatakse.

Atribuut „Nimi” kajastub ka ekraani vasakus ülanurgas asuvasse aknasse „Project Explorer”

Soovite muuta oma vormi tiitliriba millekski teistsuguseks kui „UserForm1” ja saate seda teha, kirjutades atribuudile „Caption” oma uue teksti

Saate teha tohutul hulgal muudatusi selles, kuidas kasutaja teie vormi näeb. Saate muuta värve, lisada pilte nt. ettevõtte logo, muutke asukohta nuppudega „Vasak” ja „Ülaosa”, muutke suurust nuppude „Kõrgus” ja „Laius” abil, muutke hiirekursorit ja palju muud

Kõiki neid atribuute saab programmiliselt muuta ka igale vormile lisatud juhtelemendile. Näiteks võib kasutaja valida loendiboksi juhtelemendi ja te võite kasutaja valikul keelata või peita muud juhtelemendid

Tööriistakasti kasutamine

Märkate, et kui klõpsate vormil endal, ilmub tööriistakasti hüpikaken. Kui klõpsate kuskil mujal nt. atribuutide paanil, see kaob, kuid kuvatakse uuesti, kui klõpsate vormil.

Tööriistakast pakub vormi kujundamise tegelikku mehaanikat. See võimaldab teil lisada vormile tavalised Windowsi juhtelemendid, mida kasutajad tunnevad.

Te märkate, et vormil on punktide võrk. See on snapgrid, nii et kui lisate vormile juhtelemendi, joondab see positsiooni automaatselt punktide ridade ja veergudega. See aitab tohutult juhtnuppe joondada, et juhtelemendid ei jääks räsitud

Kui klõpsate juhtelemendil ja otsustate seda mitte kasutada, muudab tööriistakasti vasakus ülanurgas nooleikoonil klõpsamine kursori normaalseks.

Saate tööriistakastile lisada täiendavaid juhtelemente, kasutades tööriistu | Täiendavad juhtnupud menüüs VBE. Neid on saadaval märkimisväärne hulk, kuid sõltuvalt teie Windowsi ja Exceli versioonidest ei tööta need alati, nii et sageli on vaja mõningaid katseid.

Samuti ei pruugi teie kasutajatel olla juurdepääsu mõnele neist lisakontrollidest või neil on Windowsi ja Exceli vanemad versioonid, mis võib põhjustada probleeme. Suurtes organisatsioonides, eriti kui need on ülemaailmsed, ei ole sellist asja nagu tavaline ehitamisarvuti, millele saaksite loota!

Väljundnupu lisamine vormile

Käsunuppu on vormile lihtne lisada. See näeb välja samamoodi nagu nupud, mida näete teistes Windowsi vormides, tavaliselt nupuna „OK” või „Tühista”.

Klõpsake tööriistakastis käsunupu ikooni. See on ikoonide alumises reas vasakult teine ​​ikoon. Vaadake ülaltoodud pilti. Sellel on tähed "ab".

Saate hiireklahvi all hoida ja juhtnuppu oma vormile tõmmata või liigutada kursori vormile, kus see muutub ristkursoriks ja saate oma nuppu paigutada ja selle suurust muuta

Kui lohistate juhtelemendi vormile, saate nupu vaikimisi suuruse. Kursori viimine vormile võimaldab muuta nupu suurust, lohistades ristkursori üle vormi

Teie vorm näeb nüüd välja selline:

Nupu pealkirjaks on vaiketekst, kuid soovite selle vastavalt oma vajadustele muuta. Võite klõpsata nupu tekstil („CommandButton1”) ja see võimaldab teil pealdist otse muuta.

Saate seda muuta ka atribuutide aknas (ekraani vasakus alanurgas). Näete atribuuti nimega „Pealkiri” ja saate selle väärtust muuta. Muutke see "Välju"

Nagu vormi atribuutide puhul, määratleb atribuut „Nimi” nime, mida kasutatakse teie VBA -koodis. Võib -olla soovite kasutada koodi, mis on teie koodis sisukam ja ilmsem. Selle saate sisestada atribuudi „Nimi” juurde.

Saate nuppu ümber paigutada, lohistades seda vormil, ja saate selle suurust muuta, klõpsates nuppude käepidemetel (valged ruudukujulised kastid) ja lohistades käepidemeid, et muuta see suuremaks või väiksemaks

Samuti saate nupu suurust muuta, muutes omaduste aknas väärtusi Kõrgus ja Laius

Saate oma vormi Excelis vaadata, klõpsates VBE tööriistariba rohelisel kolmnurgal või vajutades klahvi F5

Saate oma vormi helistada mooduli VBA -koodist, kasutades meetodit „Näita”

123 Alametendusvorm ()UserForm1.ShowEnd Sub

Teie kasutajavorm on tegelikult globaalne objekt ja sellele saab helistada kõikjal teie koodis

Praegu ei tee teie käsunupp midagi, sest selle taga pole VBA -koodi. Selle peate ise kirjutama! Praegu võib juhtuda ainult see, et saate klõpsata vormi paremas ülanurgas asuvale „Sule” X-le.

VBA koodi lisamiseks topeltklõpsake vormi nuppu

See viib teid tavalisse VBA -koodi aknasse ja kuvab klõpsamise vaikesündmuse.

Kasutate vormi sulgemiseks meetodit „Peida” ja saate lisada ka mis tahes muu koodi, näiteks sõnumikasti, mis kinnitab kasutajale, mis juhtus.

Pange tähele, et koodiakna ülaosas on kaks rippmenüüd. Esimene neist võimaldab teil valida oma vormi juhtelemendid ja teine ​​näitab kõiki sündmusi, mis on koodi lisamiseks saadaval. Nupu jaoks on ilmne sündmus „Klõps”, kuid on ka teisi, näiteks „Topeltklõps” või „Hiire liigutamine”

Kui nüüd oma vormi käivitate, teeb nupp tegelikult midagi. Vorm kaob ja kuvatakse sõnumikast, mis kinnitab, et vorm on suletud

Loomulikult saate väljumiskoodi suurendada. Võimalik, et soovite kuvada mõne muu vormi või võtta kasutusele parameetrid, mille kasutaja on teie vormile sisestanud

Sildi juhtelemendi lisamine vormile

Siltide juhtelemendid on mõeldud kasutajale, et küsida, milliseid andmeid nad peavad vormis olevale juhtelemendile sisestama, nt tekstikasti, rippmenüüd jne. Sildil pole vaikimisi piire, kuid neid saab vajadusel lisada atribuutide akna kaudu.

Juhtnupuna loetakse neid ainult kasutajale ja need on lihtsalt viis vormile teksti sisestamiseks, olgu see siis paksus kirjas või juhis selle kohta, mida sisestada või valida.

Sildi lisamiseks klõpsake tööriistakastis ikooni „A” (ülemine rida, vasakult teine) ja topeltklõpsake seda või liigutage kursor vormile ja valige asukoht ja suurus.

Kasutades atribuutide aknas atribuuti „Caption” või klõpsates siltide juhtelemendil, saate sisestada sildi juhtelemendi teksti.

Pange tähele, et tekst mähitakse vastavalt sildi juhtelemendi suurusele ja kui teksti string on liiga pikk, ei kuvata seda vormil täielikult, seega peate olema ettevaatlik siltide juhtelemendi suuruse osas.

Atribuutide akent kasutades saate muuta siltide juhtelemendi välimust, kasutades erinevaid värve, fonte, selja stiili nt. kui see katab pildi ja soovite, et see oleks läbipaistev

Sildi juhtelemendi jaoks pole vaja koodi luua. Peamine eesmärk on lisada vormile tekst, et kasutaja saaks näha, kuidas kõik muud juhtelemendid töötavad

Teksti juhtelemendi lisamine vormile

Teksti juhtelementi kasutatakse kasutajal teksti sisestamiseks, nt nime või kommentaaride sisestamiseks

Teksti juhtelement lisatakse tööriistakastist, klõpsates teksti juhtelemendi ikoonil (ülemine rida, vasakult kolmas) ja topeltklõpsates või lohistades juhtelemendi oma kohale.

Teksti juhtelementi ajatakse sageli segi siltide juhtelemendiga, kuid tekstikontroll on kasutaja sisendiks

Tekst „Sisestage oma nimi” on sildi juhtelement, nagu eelnevalt kirjeldatud, ja meil on nüüd valmis valge tekstikasti, kus kasutaja saab midagi sisestada

Atribuutide akna abil saate muuta tekstivälja värve, fonte, eriefekte või kasutada paroolimärke. Saadaval on tohutu paindlikkus

Üks tekstivälja väga oluline omadus on atribuut „MultiLine”. Kui soovite, et kasutaja sisestaks teksti juhtelementi suure hulga teksti, nt. kommentaarid, siis tuleb atribuudi „MultiLine” väärtuseks määrata True.

See on vaikimisi vale, mis tähendab, et ükskõik kui suureks oma tekstivälja teete, jääb sisestatud tekst ühele pidevale reale ja kerib tekstikasti välja. See ei keerle kasti sees.

Kui te paremklõpsate tekstiväljal selle töötamise ajal, ei kuvata hüpikaknaid, kuid klahvikombinatsioon CTRL+V töötab kleepimise korral ja CTRL+C lõikamise korral, kui kasutaja soovib teksti lõigata ja teistesse kleepida rakendusi

Jällegi peate kasutaja kirjutatud tekstiga tegelemiseks kirjutama oma koodi. Võimalik, et soovite selle töölehe lahtrisse üle kanda

Saate selle koodi lisada tekstivälja sündmusele „Muuda”

123 Privaatne alamtekstiBox1_Change ()Lehed ("Sheet1"). Vahemik ("A1"). Väärtus = TextBox1.ValueEnd Sub

Samuti võite sisestada valideerimiskoodi, et kontrollida, kas kasutaja ei sisesta prügi, millel on teie rakendusele katastroofiline mõju

Muudatussündmus ei ole selle jaoks hea, sest seda kutsutakse iga kord, kui kasutaja uue märgi sisestab. Kasutaja võiks alustada teksti stringi tippimist ja avastada koheselt, et ta rikkus teie valideerimisreegleid enne kehtiva teksti valmimist.

Kasutate sündmust „Välju”. See käivitub, kui kasutaja viib fookuse vormi teisele juhtelemendile, mis tähendab, et kasutaja ei sisesta enam andmeid.

123456 Private Sub TextBox1_Exit (ByVal Cancel MSForms.ReturnBoolean)Kui IsNull (TextBox1.Value) või Len (TextBox1.Value) <4 SiisMsgBox "Nimi on sobimatu", vbCriticalTextBox1.SetFocusLõpp KuiEnd Sub

Kui kasutaja klõpsab vormil mõnel muul juhtelemendil, kontrollib see kood kas tekstivälja tühiväärtust või vähem kui 4 tähemärki. Kui test on tõene, kuvatakse kriitilise ikooniga sõnumikast, mis teavitab kasutajat, et nimi on vale, ja fookus viiakse tagasi õigusrikkuva tekstikasti juurde, et kasutaja saaks seda parandada.

Pange tähele, et isegi kui kasutaja klõpsab nuppu Välju, teostatakse kõigepealt tekstikasti väljumissündmus, nii et see takistab kasutajal väljuda sisendit parandamata

Vormil sündmuste initsialiseerimine ja aktiveerimine

Kui VBA esmakordselt vormi loob ja käivitab, käivitab see sündmuse „Initsialiseeri”. Kuid kuna vorm kuvatakse ka sel hetkel, käivitab see ka sündmuse „Aktiveeri”. Edaspidi käivitatakse sündmus „Aktiveeri”, kuid mitte „Alusta”, kui vorm kuvatakse „Näita” meetodil või kui see kuvatakse osana vormide hierarhiast

Sündmus „Initsialiseeri” toimub ainult üks kord, kuid sündmust „Aktiveeri” võib juhtuda mitu korda

Võimalik, et soovite oma vormil sisestada töölehel vaikimisi väärtused sisendi juhtelementides, nt tekstiväljad, nii et need ilmuksid vormi esmakordsel kasutamisel, kuid kasutaja saab vaikeseaded üle kirjutada ja need uued väärtused jäävad kehtima seni, kuni kood töötab

12345678 Privaatne alamkasutajaForm_Initialize ()TextBox1.Value = Sheets ("Sheet1"). Vahemik ("A1"). VäärtusKui TextBox1.Value = ”” SiisTextBox1.Visible = ValeMuiduTextBox1.Visible = TõsiLõpp KuiEnd Sub

Sündmuse „Initsialiseerimine” leiate koodiakna teisest rippmenüüst ja kasutajavormi nime esimesest rippmenüüst.

See kood kasutab väärtust lahtris A1 lehel1 vaikeväärtusena käesoleva artikli alguses loodud tekstiväljale. Kui vorm kuvatakse esimest korda, kuvatakse vaikeväärtus. Seejärel saab kasutaja vaikeväärtuse üle kirjutada ja see säilitatakse. Kui CellA1 on tühi, peidetakse tekstivälja, vastasel juhul on see nähtav

Vaikeväärtus võib olla ka kõvasti kodeeritud:

1 TextBox1.Value = "John Smith"

Samuti võiksite veenduda, et kasutaja sisestatud väärtused ilmuvad uuesti iga kord, kui kasutaja selle Exceli seansi ajal selle vormi käivitab. VBA-kood saab väärtused hõlpsasti töövihiku lahtritesse tagasi kirjutada, kasutades juhtelemendi sündmust „Välju”, ja taastada need, kasutades vormi sündmust „Aktiveeri”

123 Privaatne alamtekstiBox1_Exit (ByVal Cancel kui MSForms.ReturnBoolean)Arvutustabelid ("Sheet1"). Vahemik ("A10"). Väärtus = TextBox1.ValueEnd Sub
123 Privaatne alamkasutajaForm_Activate ()TextBox1.Value = Sheets ("Sheet1"). Vahemik ("A10"). VäärtusEnd Sub

See kood muudab kasutaja väärtused püsivaks ja tagab ka, et need salvestatakse koos ülejäänud töövihikuga

Taotluse ja vormide salvestamine

Kui salvestate oma vorme sisaldava Exceli töövihiku, salvestatakse ka kõik vormid ja nende VBA -kood. Kõik väärtused, mida vormid kuvamise ajal hoiavad, lähevad siiski kaotsi.

Oluline on kirjutada kood nii, et kui kasutaja töövihikust või vormist väljub, kirjutatakse väärtused töövihiku lahtritesse tagasi ja see säilib.

Modaalsed ja mittemodaalsed vormid

Vormil on omadus „Show Modal”. See on vaikimisi seatud väärtusele Tõene, kuid seda saab muuta väärtuseks Väär (mittemodaalne)

Kui vorm on modaalne, tähendab see, et vormi kuvamise ajal ei pääse juurde ühelegi Exceli funktsioonile. See hõlmab teie koodi VBE aknas. Saate koodi vaadata, kuid kursor ja klaviatuur on keelatud.

Mittemodaalsel kujul pääsete vormi kuvamise ajal juurde kõikidele Exceli funktsioonidele, sealhulgas VBE aknale.

See on oluline kasutaja käitumise kontrollimise seisukohast

Vormi sulgemine

Ükskõik kui hästi kirjutate oma koodi, et kasutajat teatud marsruudile sundida, saavad nad sellest hõlpsalt mööda hiilida, klõpsates vormi paremas ülanurgas nuppu „Sule” X

Saate seda vältida, muutes vormi sündmust „QueryClose”

1234 Privaatne alamkasutajaForm_QueryClose (tühista täisarvuna, sule režiim täisarvuna)Tühista = TõsiMsgBox "See toiming on keelatud"End Sub

Sündmus „QueryClose” käivitatakse, kui kasutaja klõpsab vormi „Sule” X. See kood tühistab toimingu, nii et kasutaja on sunnitud kasutama teie nuppu Välju ja selle taga olevat koodi.

Juhtelementide lubamine ja keelamine

Kõigil teie vormi juhtelementidel on atribuut nimega „Lubatud”, mille väärtuseks on valitud Tõene või Väär. Kui see on vale, on juhtnupp hall. Seda saab näha, kuid seda ei saa kasutada.

Samuti on olemas omadus nimega „Nähtav”, mis on uuesti seatud väärtusele Tõene või vale.

Saate kirjutada koodi, et muuta teatud juhtelement kasutuskõlbmatuks või muuta see kasutajale täiesti nähtamatuks. Kui kasutate lauset „Kui”, saate valida asjaolud, millal seda teha peate

Näiteks võite esialgu keelata nupu Välju, kuni kasutaja on sisestanud väärtuse TextBox1 (nimi)

123 Privaatne alamkasutajaForm_Initialize ()CommandButton1.Enabled = ValeEnd Sub
1234567 Privaatne alamtekstiBox1_Change ()Kui Len (TextBox1.Value)> 0 SiisCommandButton1.Enabled = TõsiMuiduCommandButton1.Enabled = ValeLõpp KuiEnd Sub

See kood kasutab vormi „Initsialiseeri”, et keelata väljumisnupp (käsunupp 1), kui vorm esmakordselt ilmub, ja kasutab seejärel nuppu „Muuda” tekstikastis1 (nimi), et lubada nupp Välju, kui midagi on sisse trükitud või keelatud kui kast on tühi.

Sündmus „Muuda” käivitub iga kord, kui tekstikasti sisestatakse või kustutatakse uus märk. Kui kasutaja proovib sisestada teksti, et muuta nupp lubatud, ja kustutab seejärel kogu teksti, keelatakse nupp kohe

wave wave wave wave wave