Ovaj članak će demonstrirati upotrebu VBA TypeOf operatora.
Operator VBA TypeOf koristi se za određivanje vrste objekta. To može biti korisno u omogućavanju ili onemogućavanju kontrola na VBA obrascu ili u kontroli tijeka koda ovisno o vrsti objekta koji se koristi.
Korištenje TypeOf za kontrolu koda
Možemo upotrijebiti TypeOf kako bismo osigurali da je odabir tip određenog objekta koji nam je potreban - na primjer, možda ćemo htjeti odabrati raspon, a zatim upotrijebiti IF naredbu da vidimo što je odabrano. Ako je odabran raspon, dobit ćemo poruku koja nam govori da je raspon odabran, ali ako raspon nije odabran, dobit ćemo drugu poruku.
Odaberimo neke ćelije na svom radnom listu.
Sada, ako pokrenemo donji makro, bit će nam rečeno da smo odabrali raspon.
12345678 | Sub TestSelection ()Zatamni kao objektAko je tip odabira raspon, tadaMsgBox "Odabran je raspon!"DrugoMsgBox "Odabrano je nešto drugo"Završi akoKraj podm |
Međutim, ako ne odaberemo raspon i odaberemo nešto drugo - možda grafikon - i zatim pokrenemo makro, dobit ćemo drugačiji rezultat!
Korištenje TypeOf za kontrole obrazaca
VBA nam omogućuje stvaranje interaktivnih obrazaca koje korisnik može ispuniti i vratiti podatke u kôd koji će se koristiti na različite načine. Operator TypeOf možemo koristiti za određivanje vrste kontrola koje se koriste na obrascu.
U donjem primjeru stvorio sam korisnički obrazac s raznim kontrolama - nekoliko tekstualnih okvira, kombinirani okvir, 2 gumba s opcijama, 2 potvrdna okvira i 3 naredbena gumba.
Koristeći donji kôd, mogu odrediti koja je vrsta kontrola na obrascu prolaskom kroz sve kontrole na obrascu. Koristio sam funkciju TypeName za vraćanje poruke s vrstom kontrole, a upotrijebio sam VBA IF izjavu koristeći Vrsta funkcije za provjeru vrste kontrole koja je odabrana, a zatim daljnji okvir s porukom za vraćanje te vrste kontrole.
12345678910111213141516171819202122 | Pod WhatControlType ()Priguši ctl kao objektZa svaki ctl u meni.KontroleMsgBox (Ime tipa (ctl))'Pomoću funkcije TypeOf odredite vrstu objekta.Ako TypeOf ctl Is msforms.TextBox TadaMsgBox ("Kontrola je TextBox.")OstaloAko TypeOf ctl Je msforms.ComboBox ZatimMsgBox ("Kontrola je ComboBox.")OstaloAko TypeOf ctl Je msforms.Label OndaMsgBox ("Kontrola je oznaka.")OstaloAko je TypeOf ctl Je msforms.CommandButton ZatimMsgBox ("Kontrola je naredbeni gumb.")OstaloAko TypeOf ctl Je msforms.CheckBox ZatimMsgBox ("Kontrola je potvrdni okvir.")OstaloAko TypeOf ctl Je msforms.OptionButton ZatimMsgBox ("Kontrola je gumb za opciju/radio.")DrugoMsgBox ("Objekt je neka druga vrsta kontrole.")Završi akoSljedeća ctlKraj podm |
Ova vrsta koda može biti vrlo korisna ako želimo omogućiti ili onemogućiti kontrole. U donjem kodu, kada se obrazac prvi put otvori, gumbi s opcijama i potvrdni okviri onemogućeni su.
123456789101112 | Privatni pomoćni korisnički obrazac_Initialize ()Priguši ctl kao objektZa svaki ctl u meni.KontroleAko TypeOf ctl Is msforms.CheckBox Tadactl.Enabled = NetačnoOstaloAko TypeOf ctl Je msforms.OptionButton Zatimctl.Enabled = NetačnoDrugoctl.Enabled = IstinaZavrši akoSljedeća ctlKraj podm |
Da bih omogućio gumbe s opcijama i potvrdne okvire, napisao sam dodatni kôd iza gumba Omogući kontrole.
12345678910 | Privatna pod cmdEnable_Click ()Priguši ctl kao objektZa svaki ctl u meni.KontroleAko TypeOf ctl Is msforms.CheckBox Tadactl.Enabled = Nije ctl.EnabledOstaloAko TypeOf ctl Je msforms.OptionButton Zatimctl.Enabled = Nije ctl.EnabledZavrši akoSljedeća ctlKraj podm |
Sada kada pritisnemo gumb Omogući kontrole, ako su kontrole onemogućene, postat će omogućene, a ako su omogućene, postat će onemogućene. To se postiže korištenjem Ne Operater koji nam omogućuje prebacivanje između onemogućenog i omogućenog.