Introducción

En este artículo se describe cómo usar variables en Microsoft Excel sub-procedimientos en Microsoft Visual Basic para Aplicaciones.

Más información

Variables en un procedimiento de sub

Una característica eficaz de los lenguajes de programación es la capacidad de almacenar algo en una variable para que el contenido de la variable se pueda usar o puede cambiar más adelante en el procedimiento. En este documento se describe el siguiente uso de variables en Visual Basic:

  • Cómo se declaran las variables.

  • Los procedimientos y los proyectos que pueden usar la variable.

  • Duración de una variable.

Declarar una variable en una macro

La forma más sencilla de declarar una variable en una macro es usar la instrucción Dim. La línea siguiente declara dos variables, como enteros:

    Dim x As Integer, y As Integer

Con x e y especificados como enteros, le indica a Visual Basic que reserve memoria suficiente para una variable entera (2 bytes cada una para x e y) y que la información almacenada en x o y es un número entero entre -32768 y 32767.

NOTA: Si declara más de una variable mediante una sola instrucción Dim, debe especificar el tipo de datos para cada variable.

Si no especifica el tipo de datos para cada variable, como en el siguiente código Visual Basic, solo la variable y se configura como una variable entera. La variable x será un tipo de variante:

    Dim x, y As Integer

Para obtener más información, vea Tipo de datos Variant a continuación.
 

Para realizar una prueba de variable, siga estos pasos:

  1. Guarde y cierre los libros abiertos y, a continuación, abra un libro nuevo.

  2. Inicie el editor Visual Basic (presione ALT+F11).

  3. En el menú Insertar, haga clic en Módulo.

  4. Escriba el siguiente código:

    Sub Variable_Test()
        Dim x As Integer, y As Integer
        x = 10
        y = 100
        MsgBox "el valor de x es " & x & _
        Chr(13) & "el valor de y es " & y
    Finalizar sub

  5. Ejecute la Variable_Test macro. Recibirá el siguiente mensaje:

    the value of x is 10
    the value of y is 100

  6. Haga clic en Aceptar.

  7. En la Variable_Test macro, cambie la línea siguiente:

    x = 10

  8. a:

    x = "error"

  9. Ejecute la Variable_Test macro.

Recibirá un error en tiempo de ejecución porque "error" no es un entero y está intentando asignar este valor de cadena a la variable de entero x.
 

Resumen del tipo de datos

Estos son los tipos de datos de variables comunes:

tipos de datos de variables comunes

tipo de datos Variant

Si no especifica un tipo de datos al declarar una variable o no declara una variable en absoluto, Visual Basic especifica automáticamente el tipo de datos variant para esta variable. Las siguientes son las ventajas de las variables que se declaran como este tipo de datos:

  • Las variables pueden contener valores de cadena, fecha, hora, booleanos o numéricos.

  • Las variables pueden convertir automáticamente los valores que contienen.

La desventaja es que las variables variantes requieren al menos 16 bytes de memoria. 16 bytes de memoria pueden ser significativos en procedimientos grandes o en módulos complejos.

Para ver cómo funciona esto en la macro Variable_Test, siga estos pasos:

Cambie el código de la Variable_Test macro a:

Sub Variable_Test()
    Dim x, y
    x = "string"
    y = 1.23
    MsgBox "the value of x is " & x & _
    Chr(13) & "the value of y is " & y
End Sub

Ejecute la Variable_Test macro.

No recibirá un error porque puede asignar cualquier cosa a las variables variantes x e y.

NOTA: También puede dejar fuera la línea siguiente y la macro seguirá funcionando a medida que las variables x e y se tratan como tipos de datos Variant:

    Dim x, y

Ámbito de una variable

Al declarar una variable, es posible que otras macros del mismo módulo, de otros módulos o de otros proyectos la vean o no. Esta disponibilidad de una variable en módulos se conoce como ámbito. Los tres tipos de ámbito son nivel de procedimiento, nivel de módulo privado y nivel de módulo público. El ámbito depende de cómo y dónde declare la variable o variables.

Ámbito de nivel de procedimiento

Una variable con ámbito de nivel de procedimiento no se ve fuera del procedimiento donde se declara. Si establece el valor de una variable que tiene un ámbito de nivel de procedimiento, el contenido de esa variable no se verá en otras macros.

Para comprobar que una variable con ámbito de nivel de procedimiento no se ve fuera del procedimiento donde se declara, siga estos pasos:

  1. Inserte un nuevo módulo en el proyecto.

  2. Escriba las dos macros siguientes en este módulo:
      Sub Macro1() Dim x As Integer x = 10 MsgBox "x, como lo ve Macro1 es " & x 'la siguiente línea ejecuta Macro2 Macro2 Fin Sub Macro2() MsgBox "x, como lo ve Macro2 es " & x Fin Sub

  3. Ejecute Macro1 y verá el siguiente mensaje:

    x, as seen by Macro1 is 10

  4. Haga clic enAceptar y verá el siguiente mensaje:

    x, as seen by Macro2 is

  5. Haga clic en Aceptar.

Macro2 no muestra un valor para la variable x porque la variable x es local a Macro1.

Ámbito de nivel de módulo público y privado

Puede definir variables en la sección de declaraciones de un módulo (en la parte superior de un módulo, sobre todos los procedimientos sub) y establecer el ámbito de la variable mediante la instrucción Public, la instrucción Dim o la instrucción Private. Si coloca la instrucción Public delante de la variable, la variable estará disponible para todas las macros de todos los módulos del proyecto. Si coloca la instrucción Dim o la instrucción Private delante de la variable, la variable solo está disponible para macros en el módulo donde se declara.

Para ver la diferencia entre la instrucción Public y la instrucción Dim, siga estos pasos:

  1. Guarde y cierre los libros abiertos y, a continuación, abra un libro nuevo.

  2. Inicie el Visual Basic editor.

  3. Insertar un módulo en el proyecto.

  4. Type the following code into this module:
    
    Public x As Integer
    Sub Macro_1a()
        x = 10
        MsgBox x
        Macro_1b
    End Sub
    Sub Macro_1b()
        x = x * 2
        MsgBox x
        Macro2
    End Sub
  5. Inserte otro módulo en el proyecto.

  6. Escriba el código siguiente en este módulo:


    Sub Macro2()     x = x * 3
        MsgBox x
    Finalizar sub

  7. Ejecute Macro_1a macro en el primer módulo.

  8. Con la variable x declarada como "Público x Como entero", las tres macros del proyecto tienen acceso al valor de x. El primer cuadro de mensaje muestra un valor de 10. El segundo cuadro de mensaje muestra un valor de 20 (porque x se multiplica por 2 en Macro_1b). El tercer cuadro de mensaje muestra un valor de 60 (porque el valor de x se cambió a 20 en Macro_1b y después se multiplicó por 3 en Macro2).

  9. Cambie la línea de declaración en el primer módulo de:

       Public x As Integer

    a:

       Dim x As Integer

  10. Ejecute la Macro_1a macro.

  11. Con la variable x declarada como "Dim x As Integer", solo las macros del primer módulo tienen acceso al valor de x. Por lo tanto, el primer cuadro de mensaje muestra un valor de 10, el segundo cuadro de mensaje muestra un valor de 20 (porque x se multiplica por 2 en Macro_1b) y el tercer cuadro de mensaje muestra un valor de 0 (porque Macro2 no ve el valor de x y macro 2 usa el valor no inicializado de cero).

  12. Cambie la línea de declaración en el primer módulo de:

      Dim x As Integer

    Para:

        Private x As Integer

  13. Ejecute la Macro_1a macro.

  14. Los mismos cuadros de mensaje se muestran con el ámbito de instrucción Private que usaban la instrucción Dim. La variable x tiene el mismo ámbito, privado para el módulo donde se declara.


NOTA: Si desea que el ámbito de la variable se limite al módulo donde se declara, use la instrucción Privatestatement en lugar de la instrucción Dim. Ambos logran el mismo efecto, pero el ámbito es más claro al leer el código si usa la instrucción Private.
 

Duración de una variable

El tiempo durante el que una variable conserva su valor se conoce como su duración. El valor de una variable puede cambiar a lo largo de su duración, pero conservará un valor. Además, cuando una variable pierde el ámbito, ya no tiene un valor.
 

Inicializar el valor de una variable

Al ejecutar una macro, todas las variables se inicializan en un valor. Una variable numérica se inicializa en cero, una cadena de longitud variable se inicializa en una cadena de longitud cero ("") y una cadena de longitud fija se rellena con el código ASCII 0. Las variables variant se inicializan en Vacío. Una variable Vacía se representa mediante un cero en un contexto numérico y una cadena de longitud cero ("") en un contexto de cadena.

Variables de nivel de procedimiento

Si tiene una variable que se declara en una macro mediante la instrucción Dim, la variable conserva su valor siempre que la macro se esté ejecutando. Si esta macro llama a otras macros, el valor de la variable se conserva (aunque no está disponible para las otras macros) siempre y cuando estas otras macros también se estén ejecutando.

Para demostrar cómo funcionan las variables de nivel de procedimiento, siga estos pasos:

  1. Inserte un nuevo módulo en el proyecto.

  2. Escriba las dos macros siguientes en este módulo:

    Sub Macro1()
        'set x as a procedure level variable
       Dim x As Integer
       MsgBox "el valor inicializado de x es " & x
       x = 10
        MsgBox "x es" & x
        'la siguiente línea ejecuta Macro2
        Macro2
        MsgBox "x is still" & x
    Finalizar sub
    Sub Macro2()
        MsgBox "x, como lo ve Macro2 es " & x
    Finalizar sub

  3. Ejecutar macro1.

  4. Recibirá el siguiente mensaje:

        the initialized value of x is 0

  5. Haga clic enAceptar y verá el mensaje:

     x is 10

  6. Haga clic enAceptar y verá el siguiente mensaje:

    x, as seen by Macro2 is

  7. Haga clic en Aceptar.

  8. Macro2 no muestra un valor para la variable x porque la variable x es local a Macro1. Recibe el siguiente mensaje:

    x is still 10

  9. Haga clic en Aceptar.

  10. Ejecutar macro1.

Recibirá los mismos mensajes que se describen en los pasos 3 a 6 porque en cuanto macro1 dejó de ejecutarse en el paso 6, se perdió el valor de la variable x. Por lo tanto, al volver a ejecutar macro1 en el paso 7, el primer mensaje muestra el valor de x como cero (el valor inicializado).

Palabra clave estática

Si se declara una variable de nivel de procedimiento mediante la palabra clave Static, la variable conservará su valor hasta que se restablezca el proyecto. Por lo tanto, si tiene una variable estática, la próxima vez que llame al procedimiento, la variable estática se inicializará en su último valor.

Para ver cómo funciona la palabra clave Static, siga estos pasos:

  1. Change the code in Macro1 to:
    
    Sub Macro1()
        'set x as a procedure level variable
        Static x As Integer
           MsgBox "the initialized value of x is " & x
        x = x + 10
        MsgBox "x is " & x
    End Sub
  2. Ejecutar macro1.

  3. Verá el mensaje:

    the initialized value of x is 0

  4. Haga clic enAceptar y verá el mensaje:

    x is 10

  5. Haga clic en Aceptar.

  6. Ejecute Macro1 y recibe el siguiente mensaje:

    the initialized value of x is 10

  7. Haga clic enAceptar y verá el siguiente mensaje:

    x is 20

  8. Haga clic en Aceptar.

Los valores que aparecen en los mensajes son diferentes la segunda vez porque la variable x se declara como una variable estática y la variable conserva su valor después de ejecutar Macro1 la primera vez.

NOTA:  Si tiene una variable de nivel de módulo, su duración es la misma que si fuera una variable estática de nivel de procedimiento.

Para comprobar la duración de una variable de nivel de módulo, siga estos pasos:

  1. Change the code in the module that contains Macro1 to the following:
    
    Dim x As Integer  'create a module-level variable
    Sub Macro1()
       MsgBox "the initialized value of x is " & x
       x = x + 10
       MsgBox "x is " & x
    End Sub
  2. Ejecute Macro1 y verá el siguiente mensaje:

    the initialized value of x is 0

  3. Haga clic en Aceptar y verá el siguiente mensaje:

    x is 10

  4. Haga clic en Aceptar,

  5. Ejecute Macro1 y verá este mensaje:

    the initialized value of x is 10

  6. Haga clic en Aceptar.

  7. Recibirá el siguiente mensaje:

    x is 20

  8. Haga clic en Aceptar.

Los valores que aparecen en los mensajes son diferentes la segunda vez porque la variable x se declara como una variable estática y conserva su valor después de ejecutar Macro1 por primera vez.
 

Restablecer un proyecto para restablecer variables

Si desea restablecer el valor de una variable estática o de una variable de nivel de módulo, haga clic en el botón Restablecer en el
Barra de herramientas estándar o haga clic en Restablecer en el menú Ejecutar.

Si lo hace para el proyecto Macro1 y, después, vuelve a ejecutar Macro1,el valor de la variable x se inicializa de nuevo en cero y recibe el primer mensaje:

    the initialized value of x is 0

¿Necesita más ayuda?

Ampliar sus conocimientos
Explorar los cursos
Obtener nuevas características primero
Unirse a Microsoft Office Usuarios de Insider

¿Le ha sido útil esta información?

¿Cuál es tu grado de satisfacción con la calidad del lenguaje?
¿Qué ha afectado a tu experiencia?

¡Gracias por sus comentarios!

×