jueves, 16 de agosto de 2012

Rótulos en Movimiento con Excel

Lo prometido es deuda, y aunque he andado algo liado este verano hago esta entrada para cumplir con lo que os comenté en la entrada Simulación, movimiento e impacto en Excel, un simple ejemplo de cómo mostrar movimiento con Excel. No es la forma que indicaba en la entrada, pero sí la más sencilla para mostrar un movimiento. Insisto es una entrada referida a una curiosidad (una pequeña frivolité), por eso está dentro de la categoría de Exceltricidades. No hay entrada de estricta aplicación administrativa hoy.

Haciendo una excepción sobre mi política de no introducir entradas sobre código VBA cuando aún quedan muchísimas cosas que contar sobre el propio Excel, indicaré las dos Subrutinas necesarias. Una sale prácticamente tal cual de la grabación de una macro con el grabador.

En primer lugar construiremos el rótulo que queremos desplazar. En este caso como va a subir de abajo a arriba, lo construyo a partir de la fila 59.


La sensación de movimiento la conseguimos simplemente sucediendo eliminaciones de rangos de celdas, en este caso el rango D2:CL2, que cubre la longitud más larga del rótulo. La macro que elimina ese rango es:


Veréis que si grabáis con el grabador una macro que seleccione el rango y elimine las celdas subiendo las demás hacia arriba para ocupar el hueco, obtenéis una macro prácticamente igual que esta. Simplemente he eliminado la parte que selecciona el rango.

Ahora basta con repetir muchas veces esa macro, para ello utilizamos la siguiente subrutina. Básicamente es un bucle que repite tantas veces como le indiquemos lo que programemos dentro del mismo.


Esta rutina es muy fácil, es lo mismo (pero infinitamente más eficiente) que repetir entre Sub y End Sub 200 veces Macro1.

Ahora simplemente coloco un botón de comando a la derecha de la página (fuera del área que va a ocupar el rótulo) y le asigno la Macro “Letsmove” para iniciar el movimiento del rótulo cuando ejecutemos el botón de comando.

video

La calidad del vídeo no es la mejor pero es suficiente para mostrar la idea de movimiento en Excel. Como he dicho antes no es la forma en la que movería los marcianos en caso de querer hacer una simulación de máquina recreativa, es simplemente la manera más fácil de hacer una marquesina que nos muestre un efecto de movimiento en Excel. A partir de aquí los más inquietos podréis intentar hacer algo más sofisticado, hay mucho margen…

Por ejemplo que se repita indefinidamente el rótulo...

¿Repitiendo el rótulo una y otra vez abajo hasta la celda 20.000 y que N llegue hasta ese número?... No, claro que no!. Basta con pegar el rango que cortamos en un rango por debajo del final del rótulo original dentro de la Macro1. A medida que desaparece por arriba, se va construyendo por abajo.

Estas pequeñas trivialidades en principio parecen no servir de mucho, pero como todo en la vida, nunca se sabe dónde o de qué modo vamos a poder aplicarlas. Esto me recuerda lo que comenta Steve Jobs sobre la caligrafía en el vídeo de la derecha...

Por cierto, estoy terminando una nueva aplicación para practicar inglés. En breve la colgaré en Xcl NT docs.

4 comentarios:

Laura dijo...

Hola,

Estoy empenzando con VBA porque veo que realmente es útil. No es por ser tiquismiquis, pero ¿No tienes que definir la variable?. He leído que hay que hacerlo...
¿Me puedes recomendar algún manual o curso para aprender VBA?

Gracias y felicidades por el blog.

excel n' cia dijo...

Hola Laura,

Hombre,... desde un punto de vista purista es conveniente declarar las variables. Sobre todo porque aprovechas mejor la memoria cuando trabajas con programas muy grandes que requieren ahorrar cada bite. Pero está claro que no es el caso del ejemplo...

El tema era hacer un ejemplo lo más simple posible, y como no consume memoria no definí la variable, que como supongo que ya sabrás hace que por defecto VBA utilice una variable "Variant" que es como una variable "Universal".

Personalmente, cuando hago programas que de antemano se que no van a andar cortos de memoria no defino la variable.

Saludos y gracias por el comentario.

Laura dijo...

Hola otra vez,

Eso pensaba yo, que no era necesario, pero para probar (estoy empezando con prueba y error), quité la definición de la variable en otro programa que tengo y no funciona. Seguro que he hecho algo mal.

Ya te digo que estoy empezando... :(. Para hacerlo un poco más fácil te pedía que me recomendaras un manual o curso. ¿?.

Muchas gracias.

excel n' cia dijo...

Hola Laura,

Supongo que te aparece un mensaje que pone "Error de compilación, no se ha definido la variable". Si es así, la solución es muy sencilla.

Comprueba que el programa que comentas no ha establecido como obligatorio definir las variables. Lo verás si al principio del código aparece la instrucción "Option Explicit". También podrías tenerlo seleccionado en la ventana de opciones de la ficha del Editor. Búscala en Herramientas-Opciones. Es un check box que pone Requerir declaración de variables, (pero creo que debería estar desactivado por defecto).

Es por esto que aún no he empezado a hablar sobre código VBA en el blog, es todo un mundo y todo está relacionado, y es difícil empezar a hablar de ello sin hablar antes de lo elemental.

Creo que lo estás haciendo bien, prueba y error es como hemos aprendido casi todos.

Para que sea menos frustrante tener una visión inicial está bien que utilices un manual que te ayude a familiarizarte con el editor, objetos, colecciones, propiedades, metodos,... Hay muchos y supongo que cualquiera es válido para ese fín.

Luego, para avanzar deberás investigar, la propia ayuda de VBA, internet, libros, probar, enfadarte, alegrarte,... Tener claro lo que necesitas y pelearte con el programa hasta conseguirlo. Al principio es duro y se avanza lentamente pero con el tiempo el conocimiento crece en progresión geométrica. Merece la pena.

¡¡Ánimo!!