Tämä artikkeli osoittaa VBA TypeOf -operaattorin käytön.
VBA TypeOf -operaattoria käytetään määrittämään objektin tyyppi. Tämä voi olla hyödyllistä, kun otetaan käyttöön tai poistetaan käytöstä VBA -lomakkeen ohjaimet tai ohjataan koodin kulkua sen mukaan, minkä tyyppistä objektia käytetään.
TypeOf -koodin käyttäminen
Voimme käyttää TypeOfia varmistaaksemme, että tehty valinta on tarvitsemamme tietyn objektityypin tyyppi - esimerkiksi voimme halutessamme valita alueen ja käyttää sitten IF -lauseketta nähdäksemme, mikä on valittu. Jos alue on valittu, saamme viestin, jossa kerrotaan, että alue on valittu, mutta jos aluetta ei ole valittu, saamme toisen viestin.
Valitaan joitain soluja laskentataulukostamme.
Jos suoritamme alla olevan makron, meille kerrotaan, että valitsimme alueen.
12345678 | Alatestivalinta ()Dim rng objektinaJos TypeOf -valinta on alue sittenMsgBox "Valikoima on valittu!"MuuMsgBox "Jotain muuta on valittu"Loppu JosEnd Sub |
Jos emme kuitenkaan valitse aluetta ja valitse jotain muuta - ehkä kaaviota - ja suoritamme sitten makron, saamme erilaisen tuloksen!
TypeOfin käyttäminen lomakeohjaimissa
VBA: n avulla voimme luoda interaktiivisia lomakkeita, joita käyttäjä voi täyttää ja palauttaa tiedot käytettävään koodiin eri tavoin. Voimme käyttää TypeOf -operaattoria määrittämään lomakkeessa käytettävien ohjainten tyypin.
Alla olevassa esimerkissä olen luonut käyttäjälomakkeen, jossa on erilaisia säätimiä - pari tekstiruutua, yhdistelmäruutu, 2 asetuspainiketta, 2 valintaruutua ja 3 komentopainiketta.
Käyttämällä alla olevaa koodia voin selvittää, millaisia ohjaimia lomakkeessa on, selaamalla läpi kaikki lomakkeen ohjaimet. Olen käyttänyt TypeName -toimintoa viestin palauttamiseen ohjausobjektin tyypin kanssa ja käyttänyt VBA IF -lauseketta käyttämällä TypeOf -toiminto tarkista, minkä tyyppinen ohjausobjekti on valittu, ja sitten uusi sanomaruutu tämän tyyppisen ohjaimen palauttamiseksi.
12345678910111213141516171819202122 | Sub WhatControlType ()Dim ctl objektinaJokaiselle ctl In Me.ControlilleMsgBox (TypeName (ctl))'Käytä TypeOf -funktiota kohteen tyypin määrittämiseen.Jos TypeOf ctl on msforms.TextBox SittenMsgBox ("Ohjaus on TextBox".)ElseIf TypeOf ctl Onko msforms.ComboBox SittenMsgBox ("Ohjaus on yhdistelmälaatikko.")ElseIf TypeOf ctl Onko msforms.Label thenMsgBox ("Ohjaus on tarra.")ElseIf TypeOf ctl Onko msforms.CommandButton ThenMsgBox ("Ohjaus on komentopainike.")ElseIf TypeOf ctl on msforms.CheckBox thenMsgBox ("Ohjaus on valintaruutu.")ElseIf TypeOf ctl Onko msforms.OptionButton ThenMsgBox ("Ohjaus on lisä-/radiopainike.")MuuMsgBox ("Objekti on jonkin muun tyyppinen ohjaus.")Loppu JosSeuraava ctlEnd Sub |
Tämäntyyppinen koodi voi olla erittäin hyödyllinen, jos haluamme ottaa ohjaukset käyttöön tai poistaa ne käytöstä. Alla olevassa koodissa, kun lomake avataan ensimmäisen kerran, valintapainikkeet ja valintaruudut ovat poissa käytöstä.
123456789101112 | Yksityinen alikäyttäjäForm_Initialize ()Dim ctl objektinaJokaiselle ctl In Me.ControlilleJos TypeOf ctl on msforms.CheckBox thenctl.Enabled = VääräElseIf TypeOf ctl Onko msforms.OptionButton Thenctl.Enabled = VääräMuuctl.Enabled = TottaLoppu JosSeuraava ctlEnd Sub |
Jos haluat ottaa käyttöön valintanapit ja valintaruudut, olen kirjoittanut jonkin lisäkoodin Ota ohjaimet käyttöön -painikkeen taakse.
12345678910 | Yksityinen ali cmdEnable_Click ()Dim ctl objektinaJokaiselle ctl In Me.ControlilleJos TypeOf ctl on msforms.CheckBox thenctl.Enabled = Ei ctl.EnabledElseIf TypeOf ctl Onko msforms.OptionButton Thenctl.Enabled = Ei ctl.EnabledLoppu JosSeuraava ctlEnd Sub |
Nyt kun napsautamme Ota ohjaimet käyttöön -painiketta, jos ohjaimet eivät ole käytössä, ne tulevat käyttöön ja jos ne ovat käytössä, ne poistetaan käytöstä. Tämä saavutetaan käyttämällä Ei Operaattori, jonka avulla voimme vaihtaa käytöstä poistetun ja käytössä olevan tilan välillä.