Instrução If...Then...Else

Executa condicionalmente um grupo de instruções, dependendo do valor de uma expressão.

Sintaxe

If condição Then [ instruções ] [ Else instruçõeselse ]

Ou você pode usar a sintaxe na forma de bloco:

If condição Then
[ instruções ]
[ ElseIf condição-n Then
[ instruçõeselseif ]]
[ Else
[ instruçõeselse ]]
End If

A sintaxe da instrução If...Then...Else tem estas partes.

Parte Descrição
condição Obrigatório. Um ou mais dos dois tipos de expressão a seguir:

Uma expressão numérica ou de cadeia de caracteres avaliada como True ou False. Se condição for Null, condição será tratada como False.

Uma expressão no formato TypeOf nomedoobjeto Is tipodoobjeto. O nomedoobjeto é qualquer referência de objeto, e tipodoobjeto é qualquer tipo de objeto válido. A expressão será True se objectname for do tipo de objeto especificado por objecttype; caso contrário, será False.
instruções Opcional em forma de bloco; obrigatória em forma de linha única sem a cláusula Else. Uma ou mais instruções separadas por dois pontos; será executada se condição for True.
condição-n Opcional. Igual a condição.
instruçõeselseif Opcional. Uma ou mais instruções executadas caso a condição-n associada seja True.
instruçõeselse Opcional. Uma ou mais instruções executadas se nenhuma expressão condição ou condição-n prévia for True.

Comentários

Use o formulário de linha única (primeira sintaxe) para testes simples e curtos. Entretanto, a forma de bloco (segunda sintaxe) oferece mais estrutura e flexibilidade do que a forma de linha única e normalmente é mais fácil de ler, de manter e de depurar.

Observação

Com a forma de linha única, é possível executar várias instruções como resultado de uma decisão If...Then. Todas as instruções devem estar na mesma linha e separadas por dois pontos, como a instrução a seguir:

If A > 10 Then A = A + 1 : B = B + A : C = C + B 

Uma instrução If em forma de bloco deve ser a primeira instrução em uma linha. As partes Else, ElseIf e End If da instrução podem ter apenas um número de linha ou rótulo de linha antes delas. O bloco If deve terminar com uma instrução End If.

Para determinar se uma instrução é um bloco If, examine o que vem após a palavra-chave Then. Se algo diferente de um comentário aparecer após Then na mesma linha, a instrução será tratada como uma instrução If de linha única.

As cláusulas Else e ElseIf são opcionais. Você pode ter quantas cláusulas ElseIf quiser em um bloco If, mas nenhuma pode aparecer após a cláusula Else. É possível aninhar instruções If em bloco, ou seja, uma pode ficar dentro da outra.

Durante a execução de um bloco If (segunda sintaxe), condição é testado. Se condição for True, as instruções após Then serão executadas. Se condição for False, cada condição ElseIf (se houver) será avaliada. Quando uma condição True for encontrada, as instruções imediatamente após Then associado serão executadas. Se nenhuma das condições ElseIf for True (ou se não houver cláusulas ElseIf), as instruções após Else serão executadas. Após executar as instruções após Then ou Else, a execução continua com a instrução após End If.

Dica

Select Case pode ser mais útil ao avaliar uma única expressão que possui várias ações possíveis. No entanto, a cláusula TypeOf nomedoobjeto Is tipodoobjeto não pode ser usada com a instrução Select Case.

Observação

TypeOf não pode ser usado com tipos de dados hard como Long, Integer e assim por diante, diferentes de Object.

Exemplo

Este exemplo mostra as formas de bloco e de linha única da instrução If...Then...Else. Também ilustra o uso de If TypeOf...Then...Else.

Dim Number, Digits, MyString 
Number = 53 ' Initialize variable. 
If Number < 10 Then 
 Digits = 1 
ElseIf Number < 100 Then 
' Condition evaluates to True so the next statement is executed. 
 Digits = 2 
Else 
 Digits = 3 
End If 
 
' Assign a value using the single-line form of syntax. 
If Digits = 1 Then MyString = "One" Else MyString = "More than one" 

Use a construção If TypeOf para determinar se o Controle passado para um procedimento é uma caixa de texto.

Sub ControlProcessor(MyControl As Control) 
 If TypeOf MyControl Is CommandButton Then 
 Debug.Print "You passed in a " & TypeName(MyControl) 
 ElseIf TypeOf MyControl Is CheckBox Then 
 Debug.Print "You passed in a " & TypeName(MyControl) 
 ElseIf TypeOf MyControl Is TextBox Then 
 Debug.Print "You passed in a " & TypeName(MyControl) 
 End If 
End Sub

Confira também

Suporte e comentários

Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.