Cómo utilizar variables en subprocedimientos de Excel en Visual Basic para Aplicaciones

Seleccione idioma Seleccione idioma
Id. de artículo: 843144 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

INTRODUCCIÓN

En este artículo se describe cómo utilizar variables en subprocedimientos de Microsoft Excel en Microsoft Visual Basic para Aplicaciones.

Más información

Variables en subprocedimientos

Una característica eficaz de los lenguajes de programación es la posibilidad de almacenar algo en una variable de forma que el contenido de esta se pueda usar o 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 utilizar la variable.
  • La 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. En la siguiente línea se declaran dos variables, x e y, como enteros:
Dim x As Integer, y As Integer
Al especificar x e y como enteros, está diciendo a Visual Basic que guarde memoria suficiente para una variable de entero (2 bytes para x y 2 bytes para y) y que la información que se almacena en x o y es un número entero comprendido entre -32768 y 32767.

Nota: si declara más de una variable con una sola instrucción Dim, debe especificar el tipo de datos de cada una.

Si no especifica el tipo de datos de cada variable, como en el siguiente código de Visual Basic, solo la variable y se configura como variable de entero. La variable x será un tipo Variant:
Dim x, y As Integer
Para obtener información adicional, consulte la sección "Tipo de datos Variant".

Para realizar una prueba de variables, siga estos pasos:
  1. Guarde y cierre los libros que estén abiertos, y abra un nuevo libro.
  2. Inicie el Editor de 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
    End Sub
  5. Ejecute la macro Variable_Test. Aparecerá un mensaje similar al siguiente:
    el valor de x es 10
    el valor de y es 100
  6. Haga clic en Aceptar.
  7. En la macro Variable_Test, cambie la siguiente línea:
    x = 10
    

    por:
    x = "error"
    
  8. Ejecute la macro Variable_Test.
Recibirá un error de tiempo de ejecución porque "error" no es un entero y está intentando asignar este valor de la cadena a la variable de entero x.

Resumen de tipos de datos

En la tabla siguiente se muestran los tipos de datos de variables comunes:

Contraer esta tablaAmpliar esta tabla
Tipo de datosTamaño de almacenamientoIntervalo permitido
Boolean 2 bytes True o False
Integer 2 bytes entre -32.768 y 32.767
Long 4 bytes entre -2.147.483.648 y 2.147.483.647
Double 8 bytes entre -1, 79769313486232E308 y - 4, 94065645841247E-324 para valores negativos; entre 4.94065645841247E-324 y 1.79769313486232E308 para valores positivos
Código 8 bytes entre -922.337.203.685.477,5808 y 922.337.203.685.477,5807
Fecha 8 bytes del 1 de enero, 100 al 31 de diciembre, 9999
Cadena 10 bytes + longitud de cadena

Tipo de datos Variant

Si no especifica un tipo de datos al declarar una variable, o no declara una variable, Visual Basic especifica automáticamente el tipo de datos Variant para esta variable. A continuación se indican las ventajas de las variables que se declaran con este tipo de datos:
  • Las variables pueden contener los tipos de datos de cadena, fecha, hora, booleanos o valores numéricos.
  • Las variables pueden convertir los valores que contienen automáticamente.
La desventaja es que las variables de tipo Variant requieren al menos de 16 bytes de memoria, lo que puede representar una cantidad importante en procedimientos de gran tamaño o en módulos complejos.

Para ver cómo funciona esto en la marco Variable_Test, siga estos pasos:
  1. Cambie el código de la macro Variable_Test por:
    Sub Variable_Test()
    Dim x, y
    x = "cadena"
    y = 1,23
    MsgBox "el valor de x es " & x & _
    Chr(13) & "el valor de y es " & y
    End Sub
    
  2. Ejecute la macro Variable_Test.
No recibirá un error ya que no puede asignar nada a las variables de tipo Variant x e y.

Nota: también puede dejar fuera la siguiente línea y la macro seguirá funcionando mientras las variables x e y se traten como tipos de datos Variant:
Dim x, y

Ámbito de una variable

Cuando se declara una variable, esta se puede ver o no en otras macros del mismo módulo, en otros módulos o en otros proyectos. Esta disponibilidad de una variable en los módulos se conoce como ámbito. Los tres tipos de ámbitos son: nivel de procedimiento, nivel de módulo privado y nivel de módulo público. Que se tenga uno u otro dependerá de cómo y dónde se declaren la variable o variables.

Ámbito de nivel de procedimiento

Una variable con un ámbito de nivel de procedimiento no se ve fuera del procedimiento en el que 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 verificar que una variable con un ámbito de nivel de procedimiento no se vea 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, según se ve en Macro1 es " & x
    'la siguiente línea ejecuta Macro2
    Macro2
    End Sub
    Sub Macro2()
    MsgBox "x, según se ve en Macro2 es " & x
    End Sub
    
  3. Ejecute Macro1.

    Aparecerá un mensaje similar al siguiente:
    x, según se ve en Macro1 es 10
  4. Haga clic en Aceptar.

    Aparecerá un mensaje similar al siguiente:
    x, según se ve en Macro2 es
  5. Haga clic en Aceptar.
Macro2 no muestra un valor para la variable x porque esta es local para 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, encima de todos los subprocedimientos) y establecer el ámbito de la variable mediante las instrucciones Public, Dim o Private. Si coloca la instrucción Public delante de la variable, esta estará disponible para todas las macros de todos los módulos del proyecto. Si, por el contrario, coloca la instrucción Dim o Private delante de la variable, esta solo estará disponible para las macros del módulo en el que se declare.

Para ver la diferencia entre la instrucción Public y Dim, siga estos pasos:
  1. Guarde y cierre los libros que estén abiertos, y abra un nuevo libro.
  2. Inicie el Editor de Visual Basic.
  3. Inserte un módulo en el proyecto.
  4. Escriba el siguiente código en este módulo:
    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 siguiente código en este módulo:
    Sub Macro2()
    x = x * 3
    MsgBox x
    End Sub
    
  7. Ejecute la macro Macro_1a en el primer módulo.

    Con la variable x declarada como "Public x As Integer", las tres macros del proyecto tienen acceso al valor de x. El primer cuadro de mensaje muestra un valor de 10 y el segundo 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ó por 20 en Macro_1b y luego se multiplicó por 3 en Macro2.
  8. Cambie la línea de declaración del primer módulo de:
    Public x As Integer

    a:
    Dim x As Integer
  9. Ejecute la macro Macro_1a.

    Con la variable x declarada como "Dim x As Integer", solo las macros del primer módulo tienen acceso al valor de x. Así que el primer cuadro de mensaje muestra un valor de 10, el segundo un valor de 20, (porque x se multiplica por 2 en Macro_1b) y el tercero un valor de 0 (porque Macro2 no ve el valor de x y el valor sin inicializar de cero se utiliza en Macro 2).
  10. Cambie la línea de declaración del primer módulo de:
    Dim x As Integer

    a:
    Private x As Integer
  11. Ejecute la macro Macro_1a.
Se muestran los mismos cuadros de mensaje al usar el ámbito de la instrucción Private que cuando se usa la instrucción Dim. La variable x tiene el mismo ámbito, privado para el módulo donde se declara.

Nota: si desea limitar el ámbito de la variable al módulo donde se declara, utilice la instrucción Private en lugar de la instrucción Dim. Los dos tienen el mismo efecto, pero el ámbito es más claro al leer el código si se utiliza la instrucción Private.

Duración de una variable

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

Inicializar el valor de una variable

Cuando se ejecuta 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 de tipo Variant se inicializan como vacías. Una variable vacía se representa con un cero en un contexto numérico y con 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 con la instrucción Dim, la variable conserva su valor durante la ejecución de la macro. Si esta macro llama a otras macros, el valor de la variable se conserva (si bien no está disponible para otras macros) durante la ejecución de estas otras macros.

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()
    'establecer x como variable de nivel de procedimiento
    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 sigue siendo " & x
    End Sub
    Sub Macro2()
    MsgBox "x, según se ve en Macro2 es " & x
    End Sub
    
  3. Ejecute Macro1.

    Aparecerá un mensaje similar al siguiente:
    el valor inicializado de x es 0
  4. Haga clic en Aceptar.

    Aparecerá un mensaje similar al siguiente:
    x es 10
  5. Haga clic en Aceptar.

    Aparecerá un mensaje similar al siguiente:
    x, según se ve en Macro2 es
  6. Haga clic en Aceptar.

    Macro2 no muestra un valor para la variable x porque esta es local para Macro1. Aparecerá un mensaje similar al siguiente:
    x sigue siendo 10
  7. Haga clic en Aceptar.
  8. Ejecute Macro1.
Aparecerán los mismos mensajes que se describen en los pasos del 3 al 6 porque en cuanto Macro1 dejó de ejecutarse en el paso 6, el valor de la variable x se perdió. 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 static

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

Para ver cómo funciona la palabra clave static, siga estos pasos:
  1. Cambie el código de Macro1 por:
    Sub Macro1()
    'establecer x como variable de nivel de procedimiento
    Static x As Integer
       MsgBox "el valor inicializado de x es " & x
    x = x + 10
    MsgBox "x es " & x
    End Sub
    
  2. Ejecute Macro1.

    Aparecerá un mensaje similar al siguiente:
    el valor inicializado de x es 0
  3. Haga clic en Aceptar.

    Aparecerá un mensaje similar al siguiente:
    x es 10
  4. Haga clic en Aceptar.
  5. Ejecute Macro1.

    Aparecerá un mensaje similar al siguiente:
    el valor inicializado de x es 10
  6. Haga clic en Aceptar.

    Aparecerá un mensaje similar al siguiente:
    x es 20
  7. 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 la primera vez.

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

Para verificar la duración de una variable de nivel de módulo, siga estos pasos:
  1. Cambie el código del módulo que contiene Macro1 por el siguiente:
    Dim x As Integer  'crear una variable de nivel de módulo
    Sub Macro1()
       MsgBox "el valor inicializado de x es " & x
    x = x + 10
    MsgBox "x es " & x
    End Sub
    
  2. Ejecute Macro1.

    Aparecerá un mensaje similar al siguiente:
    el valor inicializado de x es 0
  3. Haga clic en Aceptar.

    Aparecerá un mensaje similar al siguiente:
    x es 10
  4. Haga clic en Aceptar.
  5. Ejecute Macro1.

    Aparecerá un mensaje similar al siguiente:
    el valor inicializado de x es 10
  6. Haga clic en Aceptar.

    Aparecerá un mensaje similar al siguiente:
    x es 20
  7. 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 la primera vez.

Restablecer un proyecto para restablecer las 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 la barra de herramientas Estándar, o haga clic en Restablecer en el menú Ejecutar.

Si realiza esta acción para el proyecto Macro1 y vuelve a ejecutar Macro1, el valor de la variable x se vuelve a inicializar en cero y aparece el primer mensaje:
el valor inicializado de x es 0
Para obtener más información, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
843145 Descripción de subprocedimientos de Excel en Visual Basic para Aplicaciones (matrices)
volver al principio

Propiedades

Id. de artículo: 843144 - Última revisión: viernes, 30 de agosto de 2013 - Versión: 5.0
La información de este artículo se refiere a:
  • Microsoft Office Excel 2007
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 97 Standard Edition
Palabras clave: 
kbvba kbprogramming kbinfo KB843144

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com