martes, 26 de marzo de 2013

Declaración de variables en VBA para Excel (I)


Es conveniente leer el artículo ¿Qué es una variable en VBA para Excel? antes de abordar el actual, especialmente si el lector no conoce qué es una variable.

Una vez que nos decidimos a utilizar una variable en nuestro código VBA de Excel, aunque no es obligatorio, lo ortodoxo es declararla previamente. Esto es, decirle a Excel de forma explícita que la vamos a utilizar.

¿Cómo declarar una variable?

La forma por medio de la cual se declara una variable depende de varios factores. Uno de ellos es dónde la vamos a utilizar posteriormente (sólo en la macro actual o en otras macros). De momento nos vamos a referir a variables que se utilizan en una misma macro. Es decir, su vida y su ámbito de actuación es lo que tarda una macro en ejecutarse.

Una declaración de variable sería:

Dim Ventas As Double

Que significa:

Establecer Ventas como VariableTipoNúmeroDecimalDoble

Una vez declarada, la variable se puede utilizar asignándole previamente un valor, como en esta macro:

Sub Variable()



    Dim Ventas As Double



    Ventas = Hoja2.Range("A1").Value

    MsgBox ("Las ventas mensuales han sido " & Ventas * 0.03)
    Range("A2") = Ventas * 0.03
    MsgBox ("El promedio de ventas diarias ha sido de " & Ventas / 20)
    Range("A3") = Ventas / 20

End Sub


¿Qué tipos de datos puede representar una variable?


En el ejemplo anterior, era Double (tipo decimal que puede albergar valores con deimales desde +/- 5E-324 hasta 1.8E308 y nos ocupará 8 bytes en la memoria de nuestro ordenador) , pero por supuesto, existen otros que ocupan más o menos memoria y que tienen distintas características y posibilidades. Podemos ver un resumen en la web msdn de Microsoft.

¿Cómo declarar varias variables?

Podemos utilizar tres métodos:
  • El "extendido" sería declarar cada una de las variables en una línea. Por ejemplo:
          Dim J As Variant
          Dim H as Long
          Dim N as Integer
  •  El "comprimido" sería declarar todas las variables a la vez en una línea de código:
          Dim J As Variant, H As Long, N As Integer
  • Con "signos", que sería sustituir "As XXXX" por un signo. Por ejemplo:
          Dim MiVariable$   (declara MiVariable como una variable de tipo String (texto)
 
 

¿Por qué declarar variables?

Si no es obligatorio declarar variables, ¿por qué hacerlo?

La ortodoxia en programación dice que las variables hay que declararlas, al igual que la ortodoxia en la creación de gráficos dice que es necesaria una leyenda para identificar las categorías representadas, al igual que la ortodoxia dice que nuestro hogar debe estar ordenado para vivir de forma más cómoda y eficiente.

Si declaramos las variables:
  • Ocuparán menos espacio en memoria, que si no las declaramos (por defecto, Visual Basic asignaría el tipo variant que ocupa bastante memoria: 22 bits).
  • Nuestra macro será difícil de interpretar para otros usuarios que puedan necesitar leer el código VBA (incluso para nosotros mismos). Tener al principio de la macro una lista con las variables declaradas resulta muy util y aclarador.
  • Podríamos utilizar esa variable posteriormente en varias macros. En este caso, la forma de declarar la variable no es exactamente igual, sino que la línea  Dim Variable As TipoDato se debe colocar al principio de todo el módulo para que el ámbito de la variable sea precisamente de módulo y no a nivel de una macro concreta (ámbito local a nivel procedimiento):

Está claro que si nuestra macro es muy pequeña y de uso totalmente particular quizá no sea necesaria la declaración de variables.

Por último, decir que podemos hacer que el editor de VBA nos obligue a declarar las variables para evitar olvidos. Esto se hace desde el menú "Herramientas" y después seleccionando "Opciones..." y por último activar la siguiente casilla:


Una vez hecho esto y a partir de ahora, veremos esto al principio de cada módulo que inciemos:


... y no funcionará cualquier variable que no haya sido declarada antes.

En el siguiente artículo veremos la posibilidad y la forma de declarar variables objeto. Hasta ahora, las variables a las que nos hemos referido albergan valores (de un tipo u otro, pero valores), pero también las variables pueden representar a objetos.... como por ejemplo, celdas, hojas, etc. Veremos que en ocasiones son muy útiles las variables de objeto:


Si desea llevar a la práctica todo lo que le hemos ofrecido en este artículo, puede asistir a nuestros cursos prácticos de Excel o puede solicitarlos in company:








5 comentarios:

  1. Como solucionar que una variable pierda su valor

    ResponderEliminar
    Respuestas
    1. Mira este artículo:
      http://temporaexcel.blogspot.com.es/2013/12/DeclaracionVariablesVBAIII.html
      Saludos

      Eliminar
  2. pedo inicializar varias variables en un solo renglon?
    ejemplo sin son strings, puedo hacer
    a=b=c=""

    ResponderEliminar
  3. Hola Juan David:
    Esa expresión es errónea en VBA
    Las variables se reinician solas al terminar la macro.
    Pero si quieres forzarlo, debes utilizar:
    a=""
    b=""
    c=""

    Saludos

    ResponderEliminar