VBA TypeOf

Denne artikel vil demonstrere brugen af ​​VBA TypeOf -operatøren.

VBA TypeOf -operatøren bruges til at bestemme typen af ​​et objekt. Dette kan være nyttigt til at aktivere eller deaktivere kontrolelementer på en VBA -formular eller til at styre kodestrømmen afhængigt af hvilken type objekt der bruges.

Brug af TypeOf til at styre kode

Vi kan bruge TypeOf til at sikre, at det foretagne valg er den type specifikke objekt, vi har brug for - for eksempel vil vi måske vælge et område og derefter bruge en IF -sætning til at se, hvad der er valgt. Hvis et område er valgt, får vi en besked, der fortæller os, at et område er valgt, men hvis et område ikke er valgt, får vi en anden besked.

Lad os vælge nogle celler på vores regneark.

Nu, hvis vi kører makroen herunder, får vi at vide, at vi har valgt et område.

12345678 Sub TestSelection ()Dim rng som objektHvis TypeOf Selection er rækkeviddeMsgBox "Der er valgt et område!"AndetMsgBox "Noget andet er valgt"Afslut HvisAfslut Sub

Men hvis vi ikke vælger et område og vælger noget andet - måske et diagram - og derefter kører makroen, får vi et andet resultat!

Brug af TypeOf på formularkontroller

VBA gør det muligt for os at oprette interaktive formularer, som brugeren kan udfylde og returnere data til koden, der skal bruges på forskellige måder. Vi kan bruge TypeOf -operatoren til at bestemme, hvilken type kontrolelementer der bruges på en formular.

I eksemplet herunder har jeg oprettet en brugerformular med en række forskellige kontroller på den - et par tekstbokse, en kombinationsboks, 2 valgknapper, 2 afkrydsningsfelter og 3 kommandoknapper.

Ved hjælp af koden herunder kan jeg bestemme, hvilken type kontrolelementer der er på formularen, ved at gå igennem alle kontrolelementerne på formularen. Jeg har brugt TypeName -funktionen til at returnere en meddelelse med kontroltypen og har brugt en VBA IF -erklæring ved hjælp af TypeOf -funktion for at kontrollere, hvilken type kontrol der er valgt, og derefter en yderligere meddelelsesboks for at returnere denne type kontrol.

12345678910111213141516171819202122 Sub WhatControlType ()Dim ctl som objektFor hver ctl In Me.ControlsMsgBox (TypeName (ctl))'Brug TypeOf -funktionen til at bestemme objektets type.Hvis TypeOf ctl er msforms.TextBox HerefterMsgBox ("Kontrollen er en tekstboks.")ElseIf TypeOf ctl Er msforms.ComboBox HerefterMsgBox ("Kontrollen er en kombinationsboks.")ElseIf TypeOf ctl Er msforms.Label derefterMsgBox ("Kontrollen er en etiket.")ElseIf TypeOf ctl Er msforms.CommandButton HerefterMsgBox ("Betjeningen er en kommandoknap.")ElseIf TypeOf ctl Er msforms.CheckBox HerefterMsgBox ("Betjeningen er en afkrydsningsfelt.")ElseIf TypeOf ctl Er msforms.OptionButton HerefterMsgBox ("Betjeningen er en option/radioknap.")AndetMsgBox ("Objektet er en anden form for kontrol.")Afslut HvisNæste ctlAfslut Sub

Denne type kode kan være meget nyttig, hvis vi ønsker at aktivere eller deaktivere kontroller. I nedenstående kode, når formularen først åbnes, er valgknapperne og afkrydsningsfelterne deaktiveret.

123456789101112 Privat underbrugerForm_Initialize ()Dim ctl som objektFor hver ctl In Me.ControlsHvis TypeOf ctl er msforms.CheckBox Såctl.Enabled = FalskElseIf TypeOf ctl Er msforms.OptionButton Herefterctl.Enabled = FalskAndetctl.Enabled = SandtAfslut HvisNæste ctlAfslut Sub

For at aktivere valgknapperne og afkrydsningsfelterne har jeg skrevet en yderligere kode bag knappen Aktiver kontrol.

12345678910 Privat under cmdEnable_Click ()Dim ctl som objektFor hver ctl In Me.ControlsHvis TypeOf ctl er msforms.CheckBox Såctl.Enabled = Ikke ctl.EnabledElseIf TypeOf ctl Er msforms.OptionButton Herefterctl.Enabled = Ikke ctl.EnabledAfslut HvisNæste ctlAfslut Sub

Når vi nu klikker på knappen Enable Controls, hvis kontrollerne er deaktiveret, bliver de aktiveret, og hvis de er aktiveret, bliver de deaktiveret. Dette opnås ved hjælp af Ikke Operatør, som gør det muligt for os at skifte mellem deaktiverede og aktiverede.

wave wave wave wave wave