Tipo VBAOf

Questo articolo dimostrerà l'utilizzo dell'operatore TypeOf VBA.

L'operatore VBA TypeOf viene utilizzato per determinare il tipo di un oggetto. Questo può essere utile per abilitare o disabilitare i controlli su un form VBA o per controllare il flusso di codice a seconda del tipo di oggetto utilizzato.

Utilizzo di TypeOf per controllare il codice

Possiamo usare TypeOf per assicurarci che la selezione effettuata sia il tipo di oggetto specifico richiesto, ad esempio, potremmo voler selezionare un intervallo e quindi utilizzare un'istruzione IF per vedere cosa è selezionato. Se viene selezionato un intervallo, riceveremo un messaggio che ci dice che è selezionato un intervallo, ma se un intervallo non è selezionato, otterremo un messaggio diverso.

Selezioniamo alcune celle sul nostro foglio di lavoro.

Ora, se eseguiamo la macro di seguito, ci verrà detto che abbiamo selezionato un intervallo.

12345678 Sub TestSelection()Dim rng come oggettoSe TypeOf Selection è Range, alloraMsgBox "È stato selezionato un intervallo!"AltroMsgBox "È selezionato qualcos'altro"Finisci seFine sottotitolo

Tuttavia, se non selezioniamo un intervallo e selezioniamo qualcos'altro - forse un grafico - e poi eseguiamo la macro, otterremo un risultato diverso!

Utilizzo di TypeOf sui controlli del modulo

VBA ci consente di creare moduli interattivi che l'utente può compilare e restituire dati al codice da utilizzare in vari modi. Possiamo utilizzare l'operatore TypeOf per determinare il tipo di controlli che vengono utilizzati in un form.

Nell'esempio seguente, ho creato un modulo utente con una varietà di controlli: un paio di caselle di testo, una casella combinata, 2 pulsanti di opzione, 2 caselle di controllo e 3 pulsanti di comando.

Utilizzando il codice riportato di seguito, posso determinare quale tipo di controlli sono presenti nel form eseguendo un ciclo di tutti i controlli sul form. Ho usato la funzione TypeName per restituire un messaggio con il tipo del controllo e ho usato un'istruzione IF VBA utilizzando il Tipo di funzione per verificare quale tipo di controllo è selezionato, quindi un'ulteriore finestra di messaggio per restituire quel tipo di controllo.

12345678910111213141516171819202122 Sub WhatControlType()Dim ctl come oggettoPer ogni ctl In Me.ControlsMsgBox (NomeTipo(ctl))'Usa la funzione TypeOf per determinare il tipo dell'oggetto.Se TypeOf ctl è msforms.TextBox alloraMsgBox ("Il controllo è un TextBox.")ElseIf TypeOf ctl Is msforms.ComboBox ThenMsgBox ("Il controllo è un ComboBox.")ElseIf TypeOf ctl Is msforms.Label ThenMsgBox ("Il controllo è un'etichetta.")ElseIf TypeOf ctl Is msforms.CommandButton ThenMsgBox ("Il controllo è un pulsante di comando.")ElseIf TypeOf ctl Is msforms.CheckBox ThenMsgBox ("Il controllo è una casella di controllo.")ElseIf TypeOf ctl Is msforms.OptionButton ThenMsgBox ("Il controllo è un pulsante di opzione/radio.")AltroMsgBox ("L'oggetto è un altro tipo di controllo.")Finisci seAvanti ctlFine sottotitolo

Questo tipo di codice può essere molto utile se desideriamo abilitare o disabilitare i controlli. Nel codice seguente, quando il modulo viene aperto per la prima volta, i pulsanti di opzione e le caselle di controllo sono disabilitati.

123456789101112 Private Sub UserForm_Initialize()Dim ctl come oggettoPer ogni ctl In Me.ControlsSe TypeOf ctl è msforms.CheckBox alloractl.Enabled = FalseElseIf TypeOf ctl Is msforms.OptionButton Thenctl.Enabled = FalseAltroctl.Enabled = TrueFinisci seAvanti ctlFine sottotitolo

Per abilitare i pulsanti di opzione e le caselle di controllo, ho scritto un ulteriore codice dietro il pulsante Abilita controlli.

12345678910 Sotto privato cmdEnable_Click()Dim ctl come oggettoPer ogni ctl In Me.ControlsSe TypeOf ctl è msforms.CheckBox alloractl.Enabled = Non ctl.EnabledElseIf TypeOf ctl Is msforms.OptionButton Thenctl.Enabled = Non ctl.EnabledFinisci seAvanti ctlFine sottotitolo

Ora quando facciamo clic sul pulsante Abilita controlli, se i controlli sono disabilitati, diventeranno abilitati e se sono abilitati diventeranno disabilitati. Ciò si ottiene utilizzando il Non Operatore che ci permette di alternare tra disabilitato e abilitato.

wave wave wave wave wave