VBA Salir de Procedimiento o Función
En VBA, se puede salir de un Procedimiento o de una Función, utilizando los comandos Exit Sub o Exit Function para salir de la función.
Exit Sub
Exit Function
Cuando la ejecución del código llega a Exit Sub o Exit Function, saldrá de un Procedimiento o Función y continuará con cualquier otra ejecución de código. Si quieres aprender cómo salir de un Procedimiento por un Error, haz clic en este enlace: VBA On Error Exit Sub Si quieres aprender cómo terminar una ejecución de código completa, haz clic en este enlace: VBA End
Salir de un Procedimiento en VBA
Verás en el ejemplo lo que sucede cuando usamos el comando Exit Sub en un Procedimiento. Creamos un Procedimiento ExitSub, que tiene dentro el comando Exit Sub. El Procedimiento CallExitSub llama a este Procedimiento. Aquí está el código:
Private Sub ExitSub()
Dim i As Integer
For i = 1 to 10
If i = 5 Then
Exit Sub
MsgBox "El valor de i es" & i
End If
Next i
End Sub
Private Sub CallExitSub()
Call ExitSub
MsgBox "Salir de Sub"
End Sub
En el ExitSub, primero entramos en el bucle For si el valor de i es menor que 10:
For i = 1 To 10
Next i
Después comprobamos si el valor de i es igual a 5, utilizando el comando If. Si el valor es 5, queremos salir del Prodcedimeinto y devolver el cuadro de mensaje con el valor de i:
If i = 5 Then
Exit Sub
MsgBox "El valor de i es" & i
End If
Si la condición no se cumple, la siguiente sentencia incrementa i en 1 y entra en el bucle For de nuevo:
Next i
En el CallExitSub, primero llamamos al Procedimiento ExitSub:
Call ExitSub
Después devolvemos la caja de mensajes:
MsgBox "Salir del Sub"
Si ejecutas el CallExitSub, primero llamará al ExitSub. Si ejecutas este código en el modo de depuración, verás que pasará por el bucle 5 veces. En la5ª iteración, el valor de la variable i se convierte en 5 y el código entra en el cuerpo If. Ahora se sale del Procedimiento ExitSub y se devuelve al CallExitSub. La siguiente línea es MsgBox «Exit Sub»:
Como puede ver, el ExitSub se sale justo después del comando Exit Sub , por lo que el MsgBox «El valor de i es» & i nunca se ejecutará.
Salir de una Función en VBA
Salir de una función en VBA es similar a salir de un Procedimiento, sólo que el comando es Exit Function. En el ejemplo, creamos el ExitFunc que devuelve un entero. El Procedimiento CLlamarSalirDeLaFuncion llama a esta función. Aquí está el código:
Private Function ExitFunc() As Integer
Dim i As Integer
For i = 1 to 10
If i = 5 Then
ExitFunc = i
End function
End If
Next i
End Function
Private Sub LlamarSalirDeLaFuncion()
Dim intFunc As Integer
intFunc = ExitFunc()
MsgBox "El valor de intFunc es " & intFunc
End Sub
En el ExitFunc, primero entramos en el bucle For si el valor de i es menor que 10:
For i = 1 To 10
Next i
Después comprobamos si el valor de i es igual a 5, utilizando el comando If. Si el valor es 5, asignamos el valor de i al resultado de la función y salimos de ella:
If i = 5 Then
ExitFunc = i
End Function
End If
Si la condición no se cumple, la siguiente sentencia incrementa i en 1 y entra de nuevo en el bucle For:
Next i
En la función CallExitFunction, primero llamamos a la función ExitFunc: Para ello tenemos que declarar la variable intFunc de tipo entero y asignarle el resultado de la función ExitFunc:
Dim intFunc As Integer
intFunc = ExitFunc()
Después devolvemos el cuadro de mensajes con el valor de intFunc:
MsgBox "El valor de intFunc es " & intFunc
Si ejecutas el CallExitFunction, primero llamará a la función ExitFunc. Si ejecutas este código en el modo de depuración, verás que pasará por el bucle 5 veces. En la5ª iteración, el valor de la variable i se convierte en 5 y el código entra en el cuerpo del If. Ahora el valor de la ExitFunc se convierte en i y la función se sale y vuelve a la CallExitFunction. La siguiente línea es MsgBox «El valor de intFunc es » & intFunc:
VBA Coding Made Easy
Stop searching for VBA code online. Learn more about AutoMacro - A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!Learn More!