Űrlap, vagyis Userform. Valószínűleg már találkoztál velük – no persze akkor, ha nem egyszer nyitod meg az Excel-t havonta (akkor is véletlenül😊)
Maga a userform egy párbeszédablak, minek segítségével infókat lehet megjeleníteni neked vagy adatot bekérni tőled, pl.:
A VBA-nak van néhány előre beépített userform-ja, például:
I. VBA MsgBox
A VBA message box-szal egy párbeszédablakot jeleníthetünk meg. Szintaxis:
MsgBox([Szöveg], [Gombok], [Címke])
Egy egyszerű példa VBA-ban:
1 2 3 4 5 6 7 |
Sub VBA_MsgBox() MsgBox "A riport leadási határideje minden hónap 10-e!" & vbNewLine & vbNewLine & _ "Üdvözlettel:" & vbNewLine & vbNewLine & _ "Roland", vbExclamation + vbOKOnly, "Határidõ" End Sub |
Futtatás eredménye:
A fenti egy egyszerű példa, de számos lehetőség van a testreszabásra:
A: a mondandót több sorba tudom tördelni
B: figyelemfelkeltő ikon
C: Gomb kiválasztása (OK, Mégsem stb)
D: Cím adása
Itt a gombokhoz is tudok kódot írni, vagyis az általam megírt kód fut le az “OK” gomb megnyomásakor.
II. Inputbox
Ez tőled kér be valamilyen infót. Két típusa van:
1. VBA InputBox:
Mint a neve is mutatja, ez a VBA függvénye. Paraméterei, melyeknél csak az első (prompt) megadása kötelező:
A beírt érték kimenete szöveg lesz, ezért a fenti kép végén lévő „string”. Példa, mely az általunk beírt nevet az aktív munkalap A1-es cellájába teszi:
1 2 3 4 5 6 7 8 |
Sub VBA_InputBox() Dim Nev As String Nev = InputBox("Mi a keresztneved?", "Név megadása", "Név megadása") Range("A1").Value = Nev End Sub |
Makró futtatásakor:
A: Üzenet
B: Cím
C: Alapértelmezett érték, melyet már átírtam a nevemre
D: OK gomb megnyomása után az A1-es cella tartalma
2. Application.InputBox:
Ez már az Excel függvénye és többet tud mint az előző, ezért gyakoribb a használata. Paraméterei, melyeknél szintén csak az első (prompt) megadása kötelező:
Itt az utolsó, „Type” paraméter különösen fontos: megadhatjuk, milyen adattípust szeretnénk visszakapni (szám, szöveg, tartomány). Pl. a 8-as típusnál mi választhatunk ki egy tartományt a makró futása közben, majd a kijelölt tartományban végezhetünk műveleteket:
1 2 3 4 5 6 7 8 |
Sub ApplicationInpuBox() Dim Tart As Range Set Tart = Application.InputBox("Jelölj ki egy tartományt, melyet be szeretnél zöldre színezni!", "Kijelölés", Type:=8) Tart.Interior.Color = vbGreen End Sub |
Makró futtatásakor:
A: Üzenet
B: Cím
C: a makróban lévő 8-as típus miatt nekem kell kijelölni a tartományt, aminek beírja a címét
D: eredmény: kiválasztott tartomány zöldre színezve az OK gomb megnyomása után
A fenti MsgBox-szal és InputBox-ok nem mindig elegendőek – ezt fórumokon is gyakran kérdezik:
– mi van, ha szeretném a dialóg ablak színét vagy az ottani szöveg betűszínét változtatni?
– a gombok neveit meg akarom változtatni, pl. az „OK” helyett „Elfogadom”-ra
Ezeket nem lehet megtenni a fentebb bemutatott módszerekkel, és itt jön képbe a
III. VBA UserForm
Ennek segítségével:
– könnyebbé tehetjük az adatbevitelt
– „golyóállóbb” lesz az alkalmazásunk, hiszen egy űrlapon jobban lekorlátozható, mit és hová lehet írni
– professzionálisabb megjelenést adhatunk a riportnak/adatbázisnak: az űrlapot a cégre jellemző színekkel látjuk el, hozzáadunk egy lógót, csoportosított vagy személyre szabott beviteli mezőket stb.
– minimális VBA tudással is létre lehet hozni, de makróval akár mindent elvégeztethetünk a userform-on (rögzítés, szerkesztés, rendszerezés)
– ez egy egyéni párbeszédpanel, mely egy vagy több ActiveX vezérlőt tartalmaz
Használata:
1. Létrehozás:
Excelben: ALT + F11 (ezzel megnyitjuk a VBA szerkesztőjét), majd:
A: a bal oldali Project ablakban keressük meg a munkafüzet nevét. Ha nincs ilyen ablak: View menü -> Project Explorer vagy CTRL + R billentyűparancs
B: jobb klikk a munkafüzet nevén
C: Insert
D: UserForm
Jelenlegi állapot:
A: Ha később meg akarjuk nyitni az űrlapot a VBA szerkesztőben: dupla klikk a nevére
B: Így néz ki az üres userform a szerkesztőben
C: Toolbox (Eszköztár): ha nem látszik: View menü -> Toolbox
D: Properties (Lehetőségek): ha nem látszik: View menü -> Properties Window vagy F4
Próbáljuk ki: nyissunk egy új munkafüzetet és hozzunk létre egy userform-ot
2. ActiveX vezérlők:
Ezek személyre szabhatók, vagyis állíthatjuk többek között a megjelenítést vagy a betűket. A legtöbb Excel munkalapon is működik, de egyes fajtái kizárólag VBA userform-on.
Hozzáadása:
A Toolbox ablakban (fenti kép, „C”): a kiválasztott elem felé visszük a kurzort, a bal egérgombot lenyomjuk, majd fogd és vidd módszerrel az űrlapra húzzuk. Egy TextBox (szövegdoboz) hozzáadása majd átméretezése:
Ezt követően – ha az elem ki van jelölve – a Properties szekcióban állíthatjuk a tulajdonságait. Az előbb hozzáadott TextBox-nál pár példa:
A: (Name) (név)
B: BackColor (háttérszín)
C: BorderColor (szegély színe)
D: Font (Betű típusa, mérete)
E: ForeColor (szöveg színe)
F: Height (magasság)
Fajtái:
A: Jelölőnégyzet (Check Box)
B: Szövegdoboz (Text Box)
C: Parancsgomb (Command Button)
D: Választógomb (Option Button)
E: Lista (List Box)
F: Beviteli lista (Combo Box)
G: Váltógomb (Toggle Button)
H: Léptetőnyíl (Spin Button)
I: Görgetősáv (Scroll Bar)
J: Címke (Label)
K: Kép (Image)
L: Keret vezérlő (Frame Control)
Egy kis ízelítő ebből a posztomból:
Lássuk őket egyesével: a print screen-ek a VBA Userform-ról valók, miután hozzáadtuk az adott vezérlőt.
A: Jelölőnégyzet (Check Box)
– pipa vagy nincs pipa
– egymás utáni vagy egymástól független box-okhoz is be lehet tenni a pipát
B: Szövegdoboz (Text Box)
– szöveget adhatunk hozzá, illetve szerkeszthetünk egy cellához kapcsolódóan
– használhatjuk kizárólag szöveg megjelenítésére (csak olvasható státusz), de ekkor a címke talán jobb választás
C: Parancsgomb (Command Button)
– makrót rendelhetünk hozzá, mely a gomb megnyomásakor lefut (pl. „Riport futtatása” vagy „Adatok exportálása” gomb)
D: Választógomb (Option Button)
– rádiógombnak (Radio Button) is nevezik
– a fenti mintaképen is látszik, itt általában pár lehetőség közül választhatunk egyet, vagyis a lehetőségek egymást kizárják
E: Lista (List Box)
– egy vagy több elemből álló listát jelenít meg, amiből választhatunk: egyetlen elemet, egymás utániakat vagy egymástól függetleneket
– itt általában hosszabb a választható elemekből álló lista
F: Beviteli lista (Combo Box)
– a szövegdoboz és a lista kombinációja
– legördülő lista (drop-down list) kinézet
– a lefele nyílra kell kattintani, hogy az elemeket lássuk (sárgával kiemelve)
– ahol a kurzor villog: beírhatunk egyéni (a legördülőben nem szereplő) szöveget is (sárgával kiemelve)
G: Váltógomb (Toggle Button)
– leginkább állapotjelzésre használjuk, amikor eldöntendő feladattal van dolgunk: Igen/Nem, Be/Ki stb.
– egyszer rákattintunk: Igaz (True), ha megint rákattintunk, akkor Hamis (False) lesz az értéke és így tovább
H: Léptetőnyíl (Spin Button)
vagy
– egy értéket növel vagy csökkent, mint pl. életkor, dátum vagy egy számsor
– növeléshez: jobbra nyíl vagy felfele nyíl
– csökkentéshez: balra nyíl vagy lefele nyíl
I: Görgetősáv (Scroll Bar)
vagy
– egy tartomány értékeit lehet végiggörgetni
– vagy a görgetőnyilakra kattintunk, vagy a csúszka és az egyik nyíl közé kattintunk vagy a csúszkát bal egérgombbal megfogjuk és húzzuk – hasonlóképpen, mint pl. Excelben vagy egy weboldalon
J: Címke (Label)
– szöveg megjelenítésére, pl.: fejléc, egy vezérlő célja, rövidebb leírás, magyarázatok
– olvasható (read-only) szöveg
K: Kép (Image)
– képet jelenít meg
– alkalmazása például: megértés segítő print screen-ek, logók, fényképek
L: Keret vezérlő (Frame Control)
– általában az azonos típusú vezérlőket (itt a választógombot) fogja össze és jeleníti meg egy területen, egy keretet hozzáadva
– címkét is meg lehet adni hozzá (itt: Riport típusa)
VBA userform létrehozásának lépései:
- Üres userform hozzáadása
- Makró, mely megjeleníti az űrlapot (pl.: UserForm1.Show)
- A fentebb lévő egy vagy több ActiveX vezérlő hozzáadása és azok lehetőségeinek módosítása
- Esetleg a „sima” makrók kombinálása az ActiveX vezérlős kódokkal
Példa:
Készítsünk űrlapot, ahol megadjuk a darabszámot, az egységárat és gombnyomásra megkapjuk a bevételt. Vagyis:
1. Excelben: ALT + F11-gyel belépünk a VBA szerkesztőjébe
2. Jobb klikk a fájl nevén -> Insert -> UserForm
3. A darabszámnak létrehozunk egy szövegdobozt (TextBox): a „ToolBox”-ban megkeressük a TextBox ikonját és a bal egérgombot lenyomva tartva áthúzzuk az űrlapra (fogd és vidd azaz drag and drop módszer):
4. A TextBox ki van jelölve. A Properties-nél új nevet adunk neki (Darabszam), majd Enter:
5. Még egy TextBox-ot hozzáadunk: 3-as lépés megismétlése
6. 4-es lépés megismétlése, csak ezúttal a név Egysegar lesz, majd Enter:
7. ParancsGomb (CommandButton) hozzáadása: megkeressük az ikonját és a bal egérgombot lenyomva tartva áthúzzuk az űrlapra:
8. CommandButton ki van jelölve:
A: Name megváltoztatása „Bevetel”-re
B: Caption átírása „Bevétel számolása”-ra – ez fog megjelenni magán a gombon is, mint felirat
9. Kattintsunk duplán az űrlapon lévő „Bevétel számolása” feliratú parancsgombra. Ezt látjuk:
Ez a gombhoz kapcsolódó kattintás (click) esemény, melyre makrót írhatunk. Magyarán, mi történjen akkor, amikor rákattintok majd a parancsgombra. A „Private Sub…” és „End Sub” közé adjuk hozzá az alábbi sort:
1 |
MsgBox Darabszam.Value * Egysegar.Value |
Ez azt jelenti, hogy a Darabszam (ami az első TextBox) értékét szorozza meg az Egysegar (a második TextBox) értékével. Az eredményt pedig üzenetablakban (msgbox) adja vissza. Vagyis így néz ki a kódunk, melyet F5-tel vagy a zöld lejátszás nyíllal tudunk futtatni.
Futtatás előtt:
Futtatás után:
Most már beírhatunk számokat az első és második TextBox-ba, majd kattinthatunk a „Bevétel számolása” gombon:
Eredmény: 6000
A vezérlőknél számos további esemény elérhető. Ha egy vezérlő (itt: Bevetel nevű parancsgomb) kódján belül van a kurzor: a jobb felső sarokban levő legördülő listában nézhetjük meg az elérhető eseményeket: a lefelé nyílra kattintsunk:
Egyelőre ennyit a VBA Userform-ok általános ismertetéséről.
Inspiráció (angol nyelven):
- https://support.office.com/en-us/article/overview-of-forms-form-controls-and-activex-controls-on-a-worksheet-15ba7e28-8d7f-42ab-9470-ffb9ab94e7c2?ui=en-US&rs=en-US&ad=US
- https://excelmacromastery.com/vba-user-forms-1
Remélem hasznos volt a poszt.
Kérdésed, észrevételed van? Hívj vagy dobj egy emailt az xlmotyo@gmail.com-ra.