sábado, 17 de septiembre de 2011

Cómo automatizar una acción al abrir Excel


Es muy frecuente que cada vez que entramos a una aplicación de Excel , tengamos que realizar una o varias acciones siempre de la misma forma. Por ejemplo, seleccionar una hoja, poner la fecha del día en un determinado campo, mostrar un cuadro de diálogo, etc.

En este artículo, vamos a ofrecer unos primeros pasos muy sencillos en programación Visual Basic for Appliations (VBA) en Excel, para conseguir que al abrir Excel, se ejecute la acción deseada. 

Pongamos un sencillo ejemplo, en el que deseamos que al abrir Excel se realicen las siguientes acciones:

  1. Seleccionar la Hoja3.
  2. Introducir la fecha del día en la celda A1 de la Hoja3.
  3. Activar el modo Pantalla completa de Excel.
(Además, deseamos que el usuario no perciba en pantalla que se realiza ninguna de las dos primeras acciones)

Es posible conseguir esto de dos formas. En este artículo lo vamos a hacer creando un procedimiento para el evento "Open" de un libro (también se puede hacer creando una macro y asignándole el nombre de "Auto_open", aunque esta opción puede tener alguna incompatibilidad en algunas circunstancias: Limitaciones de una macro Auto_open.)

En resumen, el proceso es decirle a Excel mediante código VBA, que al abrir el libro (Workbook), ejecute las instrucciones que nosotros queramos. Esto se hace introduciendo dicho código con las instrucciones, en la colección de objetos "ThisWorkbook" (que también está considerado como un objeto) e indicando que ocurran cuando se abra (Open). Veamoslo paso a paso:

1) Creamos un nuevo libro de Excel e inmediatamente guardamos el archivo dándole el nombre que deseemos (en la imagen de abajo se llama "Libro1") y seleccionando el tipo de archivo: "Libro de Excel habilitado para macros". Hay que recordar que si deseamos hacer este ejercicio en un archivo que ya teníamos, este debe estar guardado con el formato anteriormente mencionado (habilitado para macros).


2) Hacemos click en la Ficha "Programador" (si no la tenemos activada y no sabemos como hacerlo, ver: La ficha "Programador") y después en Visual Basic (a la izquierda). Con esto, se abre el editor de Visual Basic y deberíamos ver el panel "Explorador de proyectos" a la izquierda. (si no es así, podemos abrirlo con Ctrl+R o bien desde el comando "Explorador de proyectos" del menú "Ver").

3) Dependiendo de los complementos y archivos de Excel que tengamos habilitados y abiertos, veremos más o menos "Proyectos" en el panel abierto en el punto 1), pero entre ellos, debe estar el del archivo de Excel al que queremos asignar el código. Por ejemplo:



4) Como vemos en la imagen anterior, aparece la colección de objetos "ThisWorkbook", como un objeto más dentro de "Microsoft Excel Objetos". Pues debemos hacer doble click en "ThisWorkbook" para abrir a la derecha la ventana de código y seleccionar en el desplegable de la izquierda (Objetos) "ThisWorkbook" y en el desplegable de la derecha (Procedimientos) "Open", obteniendo lo siguiente:



5) Vemos que automáticamente se escriben las instrucciones Sub y End Sub (además de otras palabras clave y parámetros) como inicio y final del procedimiento. Nuestro código debemos situarlo entre las dos líneas que se han generado automáticamente y  por lo tanto, debe quedar todo así:


Private Sub Workbook_Open()

    Application.ScreenUpdating = False

    Sheets("Hoja3").Select

    Range("A1") = Now()

    Application.DisplayFullScreen = True



End Sub


6) Cerramos el editor de Visual Basic, cerramos y guardamos el libro al salir y volvemos a abrir el libro. Podemos comprobar que, automáticamente y sólo con la apertura del archivo, Excel selecciona la Hoja3 (Sheets("Hoja3").Select), escribe en la celda A1 la fecha y hora actual (Range("A1") = Now()) y además lo visualizamos a pantalla completa (Application.DisplayFullScreen = True). También hemos podido comprobar que, de todo el proceso, sólo vemos el resultado final gracias que  Excel no va actualizando en pantalla lo que va procesando interiormente (Application.ScreenUpdating = False)

(Sólo tenemos que presionar ESC para salir del modo pantalla completa)


Esto es tan sólo un ejemplo sencillísimo, pero basta con escribir un código diferente diseñado con alguna finalidad y situarlo en el lugar explicado (entre las instrucciones Sub y End Sub), para obtener la automatización de una tarea.

En siguientes artículos pondremos más ejemplos de código. También en xltoday.net hay muchos ejemplos de código VBA para copiar y pegar en nuestro "Thisworkbook", así como en Cyta.com y en Ron's Excel Tips .


  José Manuel Pomares Medrano


2 comentarios:

  1. grandioso... me sirvio, gracias

    ResponderEliminar
  2. Excelente aporte.
    Por favor, existe algun metodo para deshabilitar la ficha Principal Vista (Normal, Diseño de Página, Vista Previs de salto de Página, etc.) al abrir un WorkBook específico ? Gracias de antemano.

    ResponderEliminar