Dit artikel demonstreert het gebruik van de VBA TypeOf Operator.
De VBA TypeOf Operator wordt gebruikt bij het bepalen van het type object. Dit kan handig zijn bij het in- of uitschakelen van besturingselementen op een VBA-formulier of om de codestroom te regelen, afhankelijk van het type object dat wordt gebruikt.
TypeOf gebruiken om code te controleren
We kunnen TypeOf gebruiken om ervoor te zorgen dat de gemaakte selectie het type specifiek object is dat we nodig hebben - we willen bijvoorbeeld een bereik selecteren en vervolgens een IF-statement gebruiken om te zien wat er is geselecteerd. Als een bereik is geselecteerd, krijgen we een bericht dat een bereik is geselecteerd, maar als een bereik niet is geselecteerd, krijgen we een ander bericht.
Laten we enkele cellen op ons werkblad selecteren.
Als we nu de onderstaande macro uitvoeren, wordt ons verteld dat we een bereik hebben geselecteerd.
12345678 | Subtestselectie()Dim rng als objectAls het type selectie bereik is, dan:MsgBox "Er is een assortiment geselecteerd!"AndersMsgBox "Er is iets anders geselecteerd"Stop alsEinde sub |
Als we echter geen bereik selecteren en iets anders selecteren - misschien een grafiek - en vervolgens de macro uitvoeren, krijgen we een ander resultaat!
TypeOf gebruiken op formulierbesturingselementen
VBA stelt ons in staat om interactieve formulieren te maken die de gebruiker kan invullen en gegevens terug te sturen naar de code om op verschillende manieren te gebruiken. We kunnen de operator TypeOf gebruiken om het type besturingselementen te bepalen dat op een formulier wordt gebruikt.
In het onderstaande voorbeeld heb ik een gebruikersformulier gemaakt met een verscheidenheid aan bedieningselementen - een paar tekstvakken, een keuzelijst met invoervak, 2 keuzerondjes, 2 selectievakjes en 3 opdrachtknoppen.
Met behulp van de onderstaande code kan ik bepalen welk type besturingselementen op het formulier staan door alle besturingselementen op het formulier te doorlopen. Ik heb de functie TypeName gebruikt om een bericht terug te sturen met het type besturingselement en heb een VBA IF-statement gebruikt met de Soort functie om te controleren welk type controle is geselecteerd, en vervolgens een volgend berichtvenster om dat type controle terug te geven.
12345678910111213141516171819202122 | Sub WhatControlType()Dim ctl als objectVoor elke ctl In Me.ControlsMsgBox (TypeNaam (ctl))'Gebruik de functie TypeOf om het type object te bepalen.Als TypeOf ctl msforms.TextBox is, danMsgBox ("Het besturingselement is een TextBox.")ElseIf TypeOf ctl Is msforms.ComboBox DanMsgBox ("Het besturingselement is een ComboBox.")ElseIf TypeOf ctl Is msforms.Label ThenMsgBox ("Het besturingselement is een label.")ElseIf TypeOf ctl Is msforms.CommandButton DanMsgBox ("De besturing is een opdrachtknop.")ElseIf TypeOf ctl Is msforms.CheckBox DanMsgBox ("Het besturingselement is een selectievakje.")ElseIf TypeOf ctl Is msforms.OptionButton DanMsgBox ("De besturing is een optie/radio-knop.")AndersMsgBox ("Het object is een ander type besturingselement.")Stop alsvolgende ctlEinde sub |
Dit type code kan erg handig zijn als we bedieningselementen willen in- of uitschakelen. In de onderstaande code, wanneer het formulier voor het eerst wordt geopend, zijn de keuzerondjes en selectievakjes uitgeschakeld.
123456789101112 | Private Sub UserForm_Initialize()Dim ctl als objectVoor elke ctl In Me.ControlsAls TypeOf ctl msforms.CheckBox is, danctl.Enabled = FalseElseIf TypeOf ctl Is msforms.OptionButton Danctl.Enabled = FalseAndersctl.Enabled = TrueStop alsvolgende ctlEinde sub |
Om de keuzerondjes en selectievakjes in te schakelen, heb ik wat meer code achter de knop Besturing inschakelen geschreven.
12345678910 | Privé sub cmdEnable_Click()Dim ctl als objectVoor elke ctl In Me.ControlsAls TypeOf ctl msforms.CheckBox is, danctl.Enabled = Niet ctl.EnabledElseIf TypeOf ctl Is msforms.OptionButton Danctl.Enabled = Niet ctl.EnabledStop alsvolgende ctlEinde sub |
Als we nu op de knop Besturingselementen inschakelen klikken en de besturingselementen zijn uitgeschakeld, worden ze ingeschakeld en als ze zijn ingeschakeld, worden ze uitgeschakeld. Dit wordt bereikt met behulp van de Niet Operator waarmee we kunnen schakelen tussen uitgeschakeld en ingeschakeld.