Instrucción If...Then...Else

Ejecuta condicionalmente un grupo de instrucciones, según el valor de una expresión.

Sintaxis

IfconditionThen [ instrucciones ] [ Elseelsestatements ]

O bien, puede usar la sintaxis del formulario de bloque:

IfconditionThen
[ instrucciones ]
[ ElseIfcondition-nThen
[ elseifstatements ]]
[ Else
[ elsestatements ]]
End If

La sintaxis de la instrucción If...Then...Else consta de estas partes:

Parte Descripción
condition Obligatorio. Uno o más de los siguientes tipos de expresiones:

Una expresión numérica o expresión de cadena que se evalúa True o False. Si condición es Null, la condición se considera False.

Expresión del formulario TypeOfobjectnameIsobjecttype. El objectname es cualquier objeto de referencia y objecttype, cualquier tipo de objeto válido. La expresión es True si objectname es del tipo de objeto especificado por objecttype; De lo contrario, es False.
instrucciones Opcional en el formulario de bloque; obligatorio en el de una línea que no tiene cláusula Else. Una o más instrucciones separadas por dos puntos; se ejecutan si condición es True.
condition-n Opcional. Igual que condition.
elseifstatements Opcional. Una o más instrucciones ejecutadas si el valor condition-n asociado es True.
elsestatements Opcional. Una o más instrucciones ejecutadas si ninguna expresión condition o condition-n previa es True.

Comentarios

Use el formulario de una sola línea (primera sintaxis) para pruebas breves y sencillas. Sin embargo, el formulario de bloque (segunda sintaxis) proporciona más estructura y flexibilidad que el de una línea y, normalmente, es más fácil de leer, mantener y depurar.

Nota:

Con el formulario de una línea, es posible ejecutar varias instrucciones como resultado de una decisión If...Then. Todas las instrucciones deben estar en la misma línea y separadas por dos puntos, como se muestra en la siguiente instrucción:

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

Una instrucción If de formulario de bloque debe ser la primera instrucción en una línea. Las partes de la instrucción Else, ElseIf y End If pueden tener solo un número o una etiqueta de línea delante. El bloque If debe terminar con una instrucción End If.

Para determinar si una instrucción es un bloque If o no, mire qué sigue a la palabra clave Then. Si algo que no sea un comentario aparece después de Then en la misma línea, la instrucción se trata como una instrucción If de una línea.

Lac cláusulas Else y ElseIf son opcionales. Puede tener tantas cláusula ElseIf como desee en un bloque If, pero ninguna puede aparecer después de una cláusula Else. Las instrucciones If en bloque se pueden anidar, es decir, que unas pueden contener a las otras.

Al ejecutar un bloque If (segunda sintaxis), se pone a prueba condición. Si condición es True, entonces se ejecutan las instrucciones posteriores a Then. Si condición es False, se evalúan todas las condiciones ElseIf (si corresponde) por separado. Cuando se encuentra una condición True, se ejecutan las instrucciones que vienen inmediatamente después del Then al que se asocian. Si ninguna de las condiciones ElseIf son True (o si no hay ninguna cláusula ElseIf), se ejecutan las instrucciones posteriores a Else. Después de ejecutar las instrucciones que siguen a Then o Else, la ejecución continúa con la instrucción posterior a End If.

Sugerencia

Select Case puede resultar más útil al evaluar una única expresión que tiene varias acciones posibles. Sin embargo, no se puede usar la cláusula Objecttype TypeOfobjectnameIs con la instrucción Select Case.

Nota:

TypeOf no se puede usar con tipos de datos duros como Long, Integer, etc., distintos de Object.

Ejemplo

En este ejemplo, se muestran los formularios de bloque y de una línea de la instrucción If...Then...Else. También se muestra el 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 la construcción If TypeOf para determinar si el control que se ha pasado a un procedimiento es un cuadro 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

Vea también

Soporte técnico y comentarios

¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.