VBA TypeOf

Este artigo demonstrará o uso do VBA TypeOf Operator.

O VBA TypeOf Operator é usado para determinar o tipo de um objeto. Isso pode ser útil para habilitar ou desabilitar controles em um formulário VBA ou para controlar o fluxo de código, dependendo do tipo de objeto que está sendo usado.

Usando TypeOf para controlar o código

Podemos usar TypeOf para garantir que a seleção feita é o tipo de objeto específico que exigimos - por exemplo, podemos querer selecionar um intervalo e, em seguida, usar uma instrução IF para ver o que está selecionado. Se um intervalo for selecionado, receberemos uma mensagem informando que um intervalo está selecionado, mas se um intervalo não for selecionado, receberemos uma mensagem diferente.

Vamos selecionar algumas células em nossa planilha.

Agora, se executarmos a macro abaixo, seremos informados de que selecionamos um intervalo.

12345678 Sub TestSelection ()Dim rng como objetoSe a seleção de TypeOf for intervalo, entãoMsgBox "Um intervalo foi selecionado!"OutroMsgBox "Algo mais está selecionado"Fim seEnd Sub

No entanto, se não selecionarmos um intervalo e selecionarmos outra coisa - talvez um gráfico - e, em seguida, executarmos a macro, obteremos um resultado diferente!

Usando TypeOf em controles de formulário

O VBA nos permite criar formulários interativos que o usuário pode preencher e retornar dados ao código para serem usados ​​de várias maneiras. Podemos usar o operador TypeOf para determinar o tipo de controles que estão sendo usados ​​em um formulário.

No exemplo abaixo, criei um formulário de usuário com uma variedade de controles - algumas caixas de texto, uma caixa de combinação, 2 botões de opção, 2 caixas de seleção e 3 botões de comando.

Usando o código a seguir, posso determinar que tipo de controles estão no formulário, percorrendo todos os controles do formulário. Usei a função TypeName para retornar uma mensagem com o tipo do controle e usei uma instrução IF do VBA usando o Função TypeOf para verificar que tipo de controle está selecionado e, em seguida, uma outra caixa de mensagem para retornar esse tipo de controle.

12345678910111213141516171819202122 Sub WhatControlType ()Dim ctl como objetoPara cada ctl em Me.ControlsMsgBox (TypeName (ctl))'Use a função TypeOf para determinar o tipo do objeto.Se TypeOf ctl for msforms.TextBox ThenMsgBox ("O controle é um TextBox.")ElseIf TypeOf ctl Is msforms.ComboBox ThenMsgBox ("O controle é uma ComboBox.")ElseIf TypeOf ctl Is msforms.Label ThenMsgBox ("O controle é um rótulo.")ElseIf TypeOf ctl Is msforms.CommandButton ThenMsgBox ("O controle é um botão de comando.")ElseIf TypeOf ctl Is msforms.CheckBox ThenMsgBox ("O controle é uma caixa de seleção.")ElseIf TypeOf ctl Is msforms.OptionButton ThenMsgBox ("O controle é um botão de opção / rádio.")OutroMsgBox ("O objeto é algum outro tipo de controle.")Fim sePróximo ctlEnd Sub

Este tipo de código pode ser muito útil se quisermos habilitar ou desabilitar os controles. No código abaixo, quando o formulário é aberto pela primeira vez, os botões de opção e caixas de seleção são desabilitados.

123456789101112 Sub UserForm_Initialize privado ()Dim ctl como objetoPara cada ctl em Me.ControlsSe TypeOf ctl for msforms.CheckBox Thenctl.Enabled = FalseElseIf TypeOf ctl Is msforms.OptionButton Thenctl.Enabled = FalseOutroctl.Enabled = TrueFim sePróximo ctlEnd Sub

Para habilitar os botões de opção e caixas de seleção, escrevi mais alguns códigos atrás do botão Habilitar controles.

12345678910 Sub privado cmdEnable_Click ()Dim ctl como objetoPara cada ctl em Me.ControlsSe TypeOf ctl for msforms.CheckBox Thenctl.Enabled = Não ctl.EnabledElseIf TypeOf ctl Is msforms.OptionButton Thenctl.Enabled = Não ctl.EnabledFim sePróximo ctlEnd Sub

Agora, quando clicarmos no botão Habilitar Controles, se os controles estiverem desabilitados, eles ficarão habilitados e se estiverem habilitados, eles ficarão desabilitados. Isso é conseguido usando o Não Operador que nos permite alternar entre desabilitado e habilitado.

wave wave wave wave wave