lunes, 30 de diciembre de 2013

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



Para finalizar la serie, vamos a abordar la siguientes dudas que se le pueden presentar a un lector:

  • ¿Hasta cuando es válida una variable?
  • ¿Puedo utilizar en un módulo determinado, una variable declarada en otro módulo distinto?
  • ¿Cómo puedo decidir y controlar la vida de una variable (su duración o permanencia) y su ámbito de validez (en qué módulos o procedimientos será válida)?

Ámbito de validez de una variable

Hasta ahora, hemos visto cómo declarar variables dentro de un procedimiento o macro. Esas variables podrán ser utilizadas en ese mismo procedimiento (llamadas variables de procedimiento o locales), pero no en otros. Si deseamos crear una variable que pueda ser reconocida por varios procedimientos dentro de un mismo módulo (llamadas variables de módulo), debemos declararla al principio del módulo:


Cuando al principio de un módulo declaramos variables y a continuación escribimos los procedimientos, el editor de VBA establece automáticamente una separación mediante una línea. Si situamos el cursor en la zona de declaraciones, en el desplegable de la derecha leeremos "(Declaraciones)".

Una vez sabido todo esto, debemos conocer que también es posible hacer que una variable tenga un ámbito de actuación a nivel de todo el proyecto o libro de Excel. Para ello, debemos declararla como variable pública de la siguiente forma (sin "Dim"):



¿Cuanto dura el efecto de declarar una variable?

Las variables declaradas a nivel de proyecto (las variables públicas) almacenan el valor asignado* de forma permanente aun habiendo sido ejecutado algún procedimiento.

(*) Hay que recordar y tener muy claros los conceptos "declarar" y "asignar valor" a una variable. En este artículo, en todo momento, estamos hablando de "declarar" variables. Es decir, comunicar su existencia y forma. Otra cosa es asignar el valor a las variables... esto se hace siempre dentro de los procedimientos "Sub". Por lo tanto, una variable declarada como "pública" y a la cual asignamos un valor dentro de cualquier procedimiento, mantendrá permanentemente el valor asignado en dicho procedimiento.

Las variables declaradas a nivel de módulo o a nivel de procedimiento vuelven a quedarse sin valor asignado cuando se termina de ejecutar el procedimiento que le dio el valor. Si queremos evitar que una variable de módulo o que una variable de procedimiento pierda el valor al ejecutarse el procedimiento que se lo asignó, debemos declararla como "Static". de esta forma:


En la imagen anterior vemos un ejemplo en el que conseguimos que la variable "MiVariable3" no sea pública (es decir, que sólo tenga un ámbito local o de procedimiento), pero que SÍ mantenga el valor que se le asigne a continuación en ese procedimiento, de forma permanente*.

 (*)Permanente, excepto:
  • Si la macro genera un error
  • Si salimos de Excel
  • Si VBA ejecuta código en otro módulo distinto

En la imagen siguiente, vemos un ejemplo de declaraciones de variables de distinto tipo en la zona de declaraciones. Podemos utilizar indistintamente las palabras Dim o Private para variables que NO queremos que tengan un ámbito de actuación más allá del módulo y junto a ellas, declarar otras variables que SÍ queremos que tengan un ámbito de proyecto (anteponiendo la palabra "Public"):


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:









domingo, 15 de diciembre de 2013

5 bromas en Excel para... ¡Inocentes! ¡Inocentes!


En este caso, vamos a hacer un post desenfadado, ya que se acercan las Navidades y... concretamente el día de los Santos Inocentes. Así pues, para aquellos que quieran poner en un "apurillo" a algún compañero de oficina de forma transitoria, reversible y acompañado de alguna sonrisa, va este artículo.

Nos encomendamos pues, a varias cosas. Una de ellas, que el receptor de la broma no sea un gran experto en Excel y "caiga" nuestra broma. Otra, es que tenga el suficiente sentido del humor como para encajarla. Otra cuestión más, es que... el jefe no esté cerca... jeje.

Broma #1    Nivel: fácil

Provocar que cada vez que el "inocente" presione Enter en Excel, la selección pase a la celda de la izquierda, en vez de hacia abajo.

Para "perpetrar" la broma, debemos introducirnos en su Excel y hacer clic en el Botón de Office (si es Excel 2007) o en la ficha "Archivo" (si es Excel 2010 o 2013) y después en "Opciones de Excel". Una vez ahí, seleccionar "Avanzadas" y después, dentro de "Opciones de edición", seleccionar "Izquierda" debajo de la opción "Después de presionar Entrar, mover selección"


Se aplica a cualquier libro que se abra en Excel.

Broma #2    Nivel: fácil

Provocar que la rueda del ratón, en vez de tener la función de desplazar hacia arriba o hacia abajo la hoja de cálculo, tenga la función de hacer zoom de pantalla.

Para ello, debemos conseguir tener en pantalla el mismo cuadro de "Opciones de Excel" de la broma anterior y también el mismo menú "Avanzadas"...  y también dentro de "Opciones de edición", pero algo más abajo:



Se aplica a cualquier libro que se abra en Excel.

Broma #3    Nivel: fácil

Provocar que los números de fila y los nombres de las hojas, se vean en el lado derecho de la pantalla, en vez de en el izquierdo. Esta broma será efectiva sólo cuando el "inocente" active la hoja que nosotros queramos:

Activamos la hoja sobre la que queremos hacer la broma. Vamos al cuadro de "Opciones de Excel" utilizado en las bromas anteriores y después en el menú "Avanzadas", pero en este caso dentro del apartado "Mostrar opciones para esta hoja", activamos la casilla:




El resultado será...

Broma #4    Nivel: fácil

Provocar que al "inocente" le desaparezcan de Excel todas las fichas o menús de la cinta de opciones.

De nuevo vamos al cuadro de "Opciones de Excel", pero esta vez activamos el menú "Personalizar la cinta de opciones". Después, en el panel de la derecha, desactivamos todas las casillas que corresponden a las fichas de Excel:



El resultado sería:



             Publicidad (vídeo en HD de software para Plan de viabilidad económica):
http://goo.gl/Oh7FHI

Broma #5    Nivel: avanzado

Provocar que al "inocente" le aparezca, al abrir un archivo, un mensaje en pantalla que podremos personalizar.

Para conseguir esto, debemos hacer lo siguiente:

  • Abrir el archivo sobre el que queremos hacer la broma.
  • Presionar Alt+F11 para abrir el editor de VBA
  • Hacer doble clic en el objeto "ThisWorkbook" del proyecto que lleve el nombre del archivo:



  •  Seleccionar "Workbook" en el desplegable:

 ..... y vemos cómo automáticamente se escribe en la ventana de abajo unos protocolos de inicio y final de macro (o procedimiento).
  • Escribimos entre los protocolos de incio y final, exactamente el siguiente código, seguido de la frase-broma que queramos (entre comillas):
          MsgBox "La grua acaba de sancionar y arrastrar al vehículo con matrícula 4444-HHM"

...para que quede así:

  • Cerramos el editor de VBA y hacemos "Guardar como..." con el nombre del archivo original... pero con un tipo de archivo "Libro de Excel habilitado para macros" . La próxima vez que el "inocente" abra el archivo, obtendrá un mensaje como este:

Para que le funcionen las macros a nuestro "inocente" debemos habilitarselas antes, claro. En este artículo podemos ver cómo se hace.

Para revertir esta broma, basta con eliminar el código de donde se puso, guardar y salir.





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: