VBA TypeOf

Acest articol va demonstra utilizarea operatorului VBA TypeOf.

Operatorul VBA TypeOf este utilizat pentru a determina tipul unui obiect. Acest lucru poate fi util în activarea sau dezactivarea controalelor pe un formular VBA sau pentru a controla fluxul de cod în funcție de ce tip de obiect este utilizat.

Folosind TypeOf pentru a controla codul

Putem folosi TypeOf pentru a ne asigura că selecția făcută este tipul de obiect specific de care avem nevoie - de exemplu, este posibil să dorim să selectăm un interval și apoi să folosim o instrucțiune IF pentru a vedea ce este selectat. Dacă este selectat un interval, vom primi un mesaj care ne spune că este selectat un interval, dar dacă nu este selectat un interval, vom primi un mesaj diferit.

Să selectăm câteva celule din foaia noastră de lucru.

Acum, dacă rulăm macro-ul de mai jos, ni se va spune că am selectat un Range.

12345678 Sub TestSelection ()Dim rng Ca obiectDacă TypeOf Selection este Range, atunciMsgBox "A fost selectată o gamă!"AltfelMsgBox „Altceva este selectat”End IfSfârșitul Sub

Cu toate acestea, dacă nu selectăm un interval și selectăm altceva - poate o diagramă - și apoi rulăm macro-ul, vom obține un rezultat diferit!

Utilizarea TypeOf pe comenzile de formular

VBA ne permite să creăm formulare interactive pe care utilizatorul le poate completa și returna datele în cod pentru a fi utilizate în diferite moduri. Putem folosi operatorul TypeOf pentru a determina tipul de controale care sunt utilizate pe un formular.

În exemplul de mai jos, am creat un formular de utilizator cu o varietate de controale - câteva casete de text, o casetă combinată, 2 butoane de opțiuni, 2 casete de selectare și 3 butoane de comandă.

Folosind codul de mai jos, pot determina ce tip de controale se află în formular, parcurgând toate comenzile din formular. Am folosit funcția TypeName pentru a returna un mesaj cu tipul controlului și am folosit o declarație VBA IF folosind Funcția TypeOf pentru a verifica ce tip de control este selectat, apoi o altă casetă de mesaj pentru a returna acel tip de control.

12345678910111213141516171819202122 Sub WhatControlType ()Dim ctl Ca obiectPentru fiecare ctl din mine. ControaleMsgBox (TypeName (ctl))'Utilizați funcția TypeOf pentru a determina tipul obiectului.Dacă TypeOf ctl este msforms.TextBox AtunciMsgBox („Controlul este un TextBox.”)ElseIf TypeOf ctl Is msforms.ComboBox ThenMsgBox („Controlul este un ComboBox.”)ElseIf TypeOf ctl Is msforms.Label ThenMsgBox („Controlul este o etichetă”.)ElseIf TypeOf ctl Is msforms.CommandButton ThenMsgBox („Controlul este un buton de comandă.”)ElseIf TypeOf ctl Is msforms.CheckBox ThenMsgBox („Controlul este o casetă de selectare”.)ElseIf TypeOf ctl Este msforms.OptionButton ApoiMsgBox („Controlul este un buton opțional / radio.”)AltfelMsgBox („Obiectul este un alt tip de control.”)End IfUrmătorul ctlSfârșitul Sub

Acest tip de cod poate fi foarte util dacă dorim să activăm sau să dezactivăm comenzile. În codul de mai jos, când formularul este deschis pentru prima dată, butoanele de opțiune și casetele de selectare sunt dezactivate.

123456789101112 Private Sub UserForm_Initialize ()Dim ctl Ca obiectPentru fiecare ctl din mine. ControaleDacă TypeOf ctl este msforms.CheckBox Atuncictl.Enabled = FalseElseIf TypeOf ctl Este msforms.OptionButton Apoictl.Enabled = FalseAltfelctl.Enabled = AdevăratEnd IfUrmătorul ctlSfârșitul Sub

Pentru a activa butoanele de opțiune și casetele de selectare, am scris un cod suplimentar în spatele butonului Activare controale.

12345678910 Private Sub cmdEnable_Click ()Dim ctl Ca obiectPentru fiecare ctl din mine. ControaleDacă TypeOf ctl este msforms.CheckBox Atuncictl.Enabled = Nu ctl.EnabledElseIf TypeOf ctl Este msforms.OptionButton Apoictl.Enabled = Nu ctl.EnabledEnd IfUrmătorul ctlSfârșitul Sub

Acum, când facem clic pe butonul Activare controale, dacă comenzile sunt dezactivate, acestea vor deveni activate și dacă sunt activate vor deveni dezactivate. Acest lucru se realizează folosind Nu Operator care ne permite să comutăm între dezactivat și activat.

wave wave wave wave wave