Denne artikkelen vil demonstrere bruken av VBA TypeOf -operatøren.
VBA TypeOf -operatøren brukes til å bestemme typen av et objekt. Dette kan være nyttig for å aktivere eller deaktivere kontroller på et VBA -skjema eller for å kontrollere kodeflyten avhengig av hvilken type objekt som brukes.
Bruke TypeOf til å kontrollere kode
Vi kan bruke TypeOf for å sikre at valget er den typen spesifikke objektet vi trenger - for eksempel kan det være lurt å velge et område og deretter bruke en IF -setning for å se hva som er valgt. Hvis et område er valgt, får vi en melding som forteller oss at et område er valgt, men hvis et område ikke er valgt, får vi en annen melding.
La oss velge noen celler i regnearket vårt.
Hvis vi kjører makroen nedenfor, blir vi fortalt at vi valgte et område.
12345678 | Sub TestSelection ()Dim rng Som objektHvis TypeOf Selection er rekkeviddeMsgBox "Et område er valgt!"EllersMsgBox "Noe annet er valgt"Slutt omSlutt Sub |
Men hvis vi ikke velger et område og velger noe annet - kanskje et diagram - og deretter kjører makroen, får vi et annet resultat!
Bruke TypeOf på skjemakontroller
VBA lar oss lage interaktive skjemaer som brukeren kan fylle ut og returnere data til koden som skal brukes på forskjellige måter. Vi kan bruke TypeOf -operatøren til å bestemme hvilken type kontroller som brukes på et skjema.
I eksemplet nedenfor har jeg opprettet et brukerskjema med en rekke kontroller på det - et par tekstbokser, en kombinasjonsboks, 2 alternativknapper, 2 avmerkingsbokser og 3 kommandoknapper.
Ved å bruke koden nedenfor kan jeg finne ut hvilken type kontroller som er på skjemaet ved å gå gjennom alle kontrollene på skjemaet. Jeg har brukt TypeName -funksjonen for å returnere en melding med kontrolltypen, og har brukt en VBA IF -erklæring ved hjelp av TypeOf -funksjon for å kontrollere hvilken type kontroll som er valgt, og deretter en ytterligere meldingsboks for å returnere den typen kontroll.
12345678910111213141516171819202122 | Sub WhatControlType ()Dim ctl som objektFor hver ctl In Me.ControlsMsgBox (TypeName (ctl))'Bruk TypeOf -funksjonen til å bestemme objektets type.Hvis TypeOf ctl er msforms.TextBox ThenMsgBox ("Kontrollen er en tekstboks.")ElseIf TypeOf ctl Er msforms.ComboBox ThenMsgBox ("Kontrollen er en kombinasjonsboks.")ElseIf TypeOf ctl Er msforms.Label ThenMsgBox ("Kontrollen er en etikett.")ElseIf TypeOf ctl Er msforms.CommandButton DaMsgBox ("Kontrollen er en kommandoknapp.")ElseIf TypeOf ctl Er msforms.CheckBox ThenMsgBox ("Kontrollen er en avkrysningsboks.")ElseIf TypeOf ctl Er msforms.OptionButton DaMsgBox ("Kontrollen er en alternativ/radioknapp.")EllersMsgBox ("Objektet er en annen type kontroll.")Slutt omNeste ctlSlutt Sub |
Denne typen kode kan være veldig nyttig hvis vi ønsker å aktivere eller deaktivere kontroller. I koden nedenfor, når skjemaet først åpnes, er alternativknappene og avmerkingsboksene deaktivert.
123456789101112 | Private Sub UserForm_Initialize ()Dim ctl som objektFor hver ctl In Me.ControlsHvis TypeOf ctl er msforms.CheckBox Thenctl.Enabled = FalskElseIf TypeOf ctl Er msforms.OptionButton Dactl.Enabled = FalskEllersctl.Enabled = TrueSlutt omNeste ctlSlutt Sub |
For å aktivere alternativknappene og avmerkingsboksene, har jeg skrevet ytterligere kode bak knappen Aktiver kontroller.
12345678910 | Privat sub cmdEnable_Click ()Dim ctl som objektFor hver ctl In Me.ControlsHvis TypeOf ctl er msforms.CheckBox Thenctl.Enabled = Ikke ctl.EnabledElseIf TypeOf ctl Er msforms.OptionButton Dactl.Enabled = Ikke ctl.EnabledSlutt omNeste ctlSlutt Sub |
Når vi klikker på knappen Aktiver kontroller, hvis kontrollene er deaktivert, blir de aktivert, og hvis de er aktivert, blir de deaktivert. Dette oppnås ved å bruke Ikke Operatør som lar oss veksle mellom deaktivert og aktivert.