Instrucción Sub

Declara el nombre, los argumentos y el código que forman el cuerpo de un procedimientoSub.

Sintaxis

[ Privado | Público | Friend ] [ Estático ] Subnombre [ ( arglist ) ]
[ instrucciones ]
[ Exit Sub ]
[ instrucciones ]
End Sub

La sintaxis de la instrucción Sub consta de estas partes:

Parte Descripción
Public Opcional. Indica que el procedimiento Sub es accesible para todos los otros procedimientos en todos los módulos. Si se utiliza en un módulo que contiene una instrucción Option Private, el procedimiento no está disponible fuera de proyecto.
Private Opcional. Indica que el procedimiento Sub solo está accesible para otros procedimientos del módulo donde se declara.
Friend Opcional. Se usa únicamente en un módulo de clase. Indica que el procedimiento Sub es visible a través del proyecto, pero no es visible para un controlador de una instancia de un objeto.
Static Opcional. Indica que las variables locales del procedimiento Sub se conservan entre llamadas. El atributo Static no afecta a las variables declaradas fuera de Sub, incluso si se usan en el procedimiento.
name Obligatorio. Nombre de Sub; sigue las convenciones de nomenclatura de variables estándar.
arglist Opcional. Lista de variables que representa los argumentos que se pasan al procedimiento Sub cuando se le llama. Distintas variables están separadas por comas.
instrucciones Opcional. Cualquier grupo de instrucciones que se ejecutará dentro del procedimiento Sub.

El argumento arglist consta de la siguiente sintaxis y partes:

[ Optional ] [ ByVal | ByRef ] [ ParamArray ] varname [ ( ) ] [ Astype ] [ =defaultvalue ]

Parte Descripción
Optional Opcional. Palabra clave que indica que no se necesita un argumento. Si se usan, todos los argumentos siguientes en arglist también deben ser opcionales y declararse usando la palabra clave Optional. Optional no se puede usar para ningún argumento si se usa ParamArray.
ByVal Opcional. Indica que el argumento se pasa por valor.
ByRef Opcional. Indica que el argumento se pasa por referencia. ByRef es el valor predeterminado en Visual Basic.
ParamArray Opcional. Solo se usa como último argumento de arglist para indicar que el argumento final es una matrizOpcional de elementos Variant. La palabra clave ParamArray le permite proporcionar un número arbitrario de argumentos. ParamArray no pueden usarse con ByVal, ByRef u Optional.
varname Obligatorio. Nombre de la variable que representa el argumento; sigue las convenciones de nomenclatura de variables estándar.
type Opcional. Tipo de datos del argumento que se pasó al procedimiento; puede ser Byte, Boolean, Integer, Long, Currency, Single, Double, Decimal (no es compatible actualmente), Date, String (solo de longitud variable), Object, Variant o un object type específico. Si el parámetro no es Optional, también puede especificarse un tipo definido por el usuario.
defaultvalue Opcional. Cualquier constante o expresión constante. Válida solo para parámetros Optional. Si el tipo es Object, un valor predeterminado explícito solo puede ser Nothing.

Observaciones

Si no se especifica explícitamente mediante Public, Private o Friend, los procedimientos Sub son públicos de forma predeterminada.

Si no se usa Static, el valor de las variables locales no se conserva entre llamadas.

La palabra clave Friend solo puede utilizarse en los módulos de clase. No obstante, los procedimientos de cualquier módulo de un proyecto pueden tener acceso a los procedimientos Friend. Un procedimiento Friend no aparece en la biblioteca de tipos de su clase primaria, ni tampoco puede un procedimiento Friend ser un enlace en tiempo de ejecución.

Los procedimientos Sub pueden ser recursivos, es decir, que pueden llamarse a sí mismos para realizar una tarea determinada. No obstante, la recursión puede llevar al desbordamiento de pila. La palabra clave Static normalmente no se usa con procedimientos Sub recursivos.

Todo el código ejecutable debe estar en procedimientos. No puede definir un procedimiento Sub dentro de otro procedimiento Sub, Function o Property.

Las palabras clave Exit Sub provocan una salida inmediata de un procedimiento Sub. La ejecución del programa continúa con la instrucción que sigue a la que llama al procedimiento Sub. Cualquier número de instrucciones Exit Sub pueden aparecer en cualquier lugar en un procedimiento Sub.

Como un procedimiento Function, un procedimiento Sub es independiente y puede aceptar argumentos, realizar una serie de instrucciones y cambiar los valores de sus argumentos. Sin embargo, a diferencia de un procedimiento Function, que devuelve un valor, uno Sub no puede usarse en una expresión.

Se llama a un procedimiento Sub usando el nombre de este seguido de la lista de argumentos. Consulte la instrucción Llamada para obtener información sobre cómo se llama a procedimientos Sub.

Las variables usadas en procedimientos Sub se dividen en dos categorías: las que están declaradas explícitamente dentro del procedimiento y las que no. Las variables declaradas explícitamente en un procedimiento (con Dim o su equivalente) siempre son locales en el procedimiento. Las variables que se utilizan pero no están explícitamente declaradas en un procedimiento también son locales, a menos que estén declaradas explícitamente a un nivel superior fuera del procedimiento.

Un procedimiento puede usar una variable que no se declare explícitamente en el procedimiento, pero esto puede crear un conflicto de nombres si algo que definió en el nivel de módulo tiene el mismo nombre. Si el procedimiento hace referencia a una variable no declarada con el mismo nombre que otro procedimiento, constante o variable, se supone que el procedimiento hace referencia a ese nombre del nivel de módulo. Declare variables explícitamente para evitar este tipo de conflicto. Use una instrucción Option Explicit para forzar la declaración explícita de variables.

Nota:

No se puede usar GoSub, GoTo ni Return para entrar o salir de un procedimiento Sub.

Ejemplo

En este ejemplo, se usa la instrucción Sub para definir el nombre, los argumentos y el código que forman el cuerpo de un procedimiento Sub.

' Sub procedure definition. 
' Sub procedure with two arguments. 
Sub SubComputeArea(Length, TheWidth) 

   Dim Area As Double ' Declare local variable. 

   If Length = 0 Or TheWidth = 0 Then 
      ' If either argument = 0. 
      Exit Sub ' Exit Sub immediately. 
   End If 
   
   Area = Length * TheWidth ' Calculate area of rectangle. 
   Debug.Print Area ' Print Area to Debug window. 

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.