Denna artikel kommer att visa användningen av VBA TypeOf -operatören.
VBA TypeOf -operatören används för att bestämma typen av ett objekt. Detta kan vara användbart för att aktivera eller inaktivera kontroller på ett VBA -formulär eller för att styra kodflödet beroende på vilken typ av objekt som används.
Använda TypeOf för att styra kod
Vi kan använda TypeOf för att säkerställa att det val som görs är den typ av specifikt objekt som vi behöver - till exempel kanske vi vill välja ett intervall och sedan använda ett IF -uttalande för att se vad som är valt. Om ett område väljs kommer vi att få ett meddelande om att ett område är valt, men om ett område inte väljs kommer vi att få ett annat meddelande.
Låt oss välja några celler i vårt kalkylblad.
Om vi kör makrot nedan får vi veta att vi har valt ett intervall.
12345678 | Sub TestSelection ()Dim rng Som objektOm TypeOf Selection är intervall dåMsgBox "Ett område har valts!"AnnanMsgBox "Något annat är valt"Avsluta omAvsluta Sub |
Men om vi inte väljer ett intervall och väljer något annat - kanske ett diagram - och sedan kör makrot, får vi ett annat resultat!
Använda TypeOf på formulärkontroller
VBA gör det möjligt för oss att skapa interaktiva formulär som användaren kan fylla i och returnera data till koden för att användas på olika sätt. Vi kan använda TypeOf -operatören för att bestämma vilken typ av kontroller som används på ett formulär.
I exemplet nedan har jag skapat ett användarformulär med en mängd olika kontroller på det - ett par textrutor, en kombinationsruta, 2 alternativknappar, 2 kryssrutor och 3 kommandoknappar.
Med hjälp av koden nedan kan jag avgöra vilken typ av kontroller som finns på formuläret genom att gå igenom alla kontroller på formuläret. Jag har använt TypeName -funktionen för att returnera ett meddelande med kontrolltypen och har använt ett VBA IF -uttalande med hjälp av TypeOf -funktion för att kontrollera vilken typ av kontroll som har valts och sedan en ytterligare meddelanderuta för att returnera den typen av kontroll.
12345678910111213141516171819202122 | Sub WhatControlType ()Dim ctl som objektFör varje ctl In Me.ControlsMsgBox (TypeName (ctl))'Använd funktionen TypeOf för att bestämma objektets typ.Om TypeOf ctl är msforms.TextBox DåMsgBox ("Kontrollen är en textruta.")ElseIf TypeOf ctl Är msforms.ComboBox DåMsgBox ("Kontrollen är en kombinationsruta.")ElseIf TypeOf ctl Är msforms.Label DåMsgBox ("Kontrollen är en etikett.")ElseIf TypeOf ctl Är msforms.CommandButton DåMsgBox ("Kontrollen är en kommandoknapp.")ElseIf TypeOf ctl är msforms.CheckBox DåMsgBox ("Kontrollen är en kryssruta.")ElseIf TypeOf ctl Är msforms.OptionButton DåMsgBox ("Kontrollen är en alternativ/radioknapp.")AnnanMsgBox ("Objektet är någon annan typ av kontroll.")Avsluta omNästa ctlAvsluta Sub |
Denna typ av kod kan vara mycket användbar om vi vill aktivera eller inaktivera kontroller. I koden nedan, när formuläret öppnas först, är alternativknapparna och kryssrutorna inaktiverade.
123456789101112 | Private Sub UserForm_Initialize ()Dim ctl som objektFör varje ctl In Me.ControlsOm TypeOf ctl är msforms.CheckBox Dåctl.Enabled = FalsktElseIf TypeOf ctl Är msforms.OptionButton Dåctl.Enabled = FalsktAnnanctl.Enabled = TrueAvsluta omNästa ctlAvsluta Sub |
För att aktivera alternativknapparna och kryssrutorna har jag skrivit ytterligare en kod bakom knappen Aktivera kontroller.
12345678910 | Privat under cmdEnable_Click ()Dim ctl som objektFör varje ctl In Me.ControlsOm TypeOf ctl är msforms.CheckBox Dåctl.Enabled = Inte ctl.EnabledElseIf TypeOf ctl Är msforms.OptionButton Dåctl.Enabled = Inte ctl.EnabledAvsluta omNästa ctlAvsluta Sub |
När vi nu klickar på knappen Aktivera kontroller, om kontrollerna är inaktiverade, kommer de att aktiveras och om de är aktiverade kommer de att inaktiveras. Detta uppnås med hjälp av Inte Operatör som gör att vi kan växla mellan funktionshindrade och aktiverade.