lunes, febrero 12, 2007

Macros Excel – distribuyéndolas a otros usuarios

En la nota anterior vimos qué fácil es automatizar tareas con macros en Excel.
También vimos como hacer que las macros que desarrollamos estén disponibles en toda sesión de Excel, guardándolas en el cuaderno Personal.xls.

Si queremos distribuir nuestra macro a otros usuarios podemos, simplemente, darles una copia del cuaderno que contiene la macro.

Una forma más eficiente de hacerlo es guardando el cuaderno como Complemento (Add-in). Los complementos son cuadernos "invisibles", con extensión ".xla", que agregan a Excel cierta funcionalidad. En nuestro caso, la macro que desarrollamos.

Los complementos no se abren, como los cuadernos regulares de Excel (.xls), sino que se instalan con el menú Herramientas—Complementos. Más adelante mostraremos cómo hacerlo.

Otro detalle importante es que las macros contenidas en cuadernos de tipo complementos, no son visibles con el menú Herramientas—Macros. Debido a esto, debemos incluir en el complemento un método para activar la macro.

En esta nota mostraremos como agregar una barra de herramientas con un botón que activa la macro cada vez que instalamos el complemento.

Una vez desarrollada la macro, y después de comprobar que funciona, guardamos el cuaderno como Complemento con el menú Archivo—Guardar como





Excel propone la carpeta Addins de Office (su ubicación depende la versión de Office). No es obligatorio guardarlo en esa carpeta.

El próximo paso es pasar al editor de Visual Basic (Alt+F11). En la ventanilla de proyectos ubicamos el complemento (N_Gris.xla en nuestro caso) y volvemos visibles los objetos pulsando la señal "+"




Seleccionamos el objeto ThisWorkbook de N_Gris.xla. En la ventanilla de las propiedades del objeto, cambiamos la propiedad de IsAddin de False a True.



Al hacer esto, el cuaderno que contiene la macro (la instancia .xls del complemento) se vuelve "invisible".
Ahora guardamos el proyecto con el menú Archivo—Guardar del editor de Vba.
El siguiente paso es agregar un método para activar la macro. Existen varias posibilidades. En esta nota mostraremos como agregar una barra de herramientas. En una próxima nota veremos como agregar un item en la barra del menú de Excel.

En la ventanilla de Proyectos del editor de Vba, hacemos un doble clic al objeto ThisWorkBook. Esto provoca que se abra un módulo especial al que podemos agregar eventos al objeto. Eventos son macros especiales que se activan cuando ocurre algo en particular (algún evento, de allí el nombre) relacionado con el objeto.

En la ventana del editor de Vba, vamos a la ventanilla donde aparece la palabra "General" y elegimos "Workbook"




Al hacerlo Excel agrega al módulo el evento Workbook_Open. Este evento activa la macro que crea la barra con el botón, cada vez que instalemos el complemento.
De la misma manera, necesitamos una rutina que borre la barra de herramientas cada vez que desinstalemos el complemento. Esto lo hacemos con un evento BeforeClose





Las rutinas son las siguientes:


Private Sub Workbook_BeforeClose(Cancel As Boolean)
      Call cerrar_barra
End Sub

Private Sub Workbook_Open()
     Call crear_barra
End Sub


Como se ve, son dos rutinas muy sencillas. Cada una llama a otra rutina que crea o borra la barra.

Las rutinas para crear y borrar la barra de herramientas las escribimos en un módulo normal de Vba. Creamos un nuevo módulo y por, comodidad y claridad, le cambiamos el nombre a "Barra"



También hemos cambiado el nombre del módulo que contiene la macro a "Aplicación". Esto se hace seleccionando el módulo y cambiando el valor de la propiedad Name.

En el módulo "Barra" escribimos las rutinas que aparecen en los eventos de ThisWorkBook:


Sub crear_barra()
      Dim Boton As CommandBarButton

      CommandBars.Add(Name:="N_gris").Visible = True
      Set Boton = CommandBars("N_Gris").Controls.Add _(Type:=msoControlButton)
      With Boton
            .Caption = "Aplicar negrita y fondo gris"
            .FaceId = 200
            .OnAction = "N_gris"
      End With
End Sub

Sub cerrar_barra()
      On Error Resume Next
      CommandBars("N_Gris").Delete
End Sub




Guardamos nuevamente el complemento usando el menú Archivo—Guardar del editor de Vba.

Para instalar el complemento usamos el menú Herramientas—Complementos de Excel



Apretamos el botón Examinar y vamos a la carpeta dónde hemos guardado el complemento (el icono de los complementos es distinto del de los archivos Excel comunes).
Apretamos Aceptar y nos aseguramos que el complemento este marcado con una "V"



Apretamos "Aceptar" y la barra de herramientas aparecerá sobre el cuaderno Excel. Para desinstalar el complemento quitamos la señal "V" en el diálogo Complementos del menú Herramientas.

Para agregar el comentario que aparece en la parte inferior del diálogo, tenemos que cambiar la propiedad IsAddin del complemento a False, para hacerlo visible. Luego en el menú Archivo—Propiedades, vamos a la pestaña Resumen y agregamos el comentario



Luego, volvemos al editor de Vba y cambiamos la propiedad IsAddin de ThisWorkbook a True, y, naturalmente, guardamos el proyecto.
Para distribuir el complemento podemos mandar el archivo con instrucciones de cómo instalarlo. También podemos ubicarlo en un carpeta accesible a los otros usuarios, que podrán instalar el complemento guardado allí.
La ventaja de este sistema consiste en que nos permite actualizar las macros del complemento fácilmente (no es necesario mandar nuevas copias a los usuarios).


Technorati Tags:

lunes, febrero 05, 2007

Macros Excel – haciéndolas disponibles para todos los cuadernos

Con Excel es relativamente fácil crear macros. Uno de los usos más corrientes es automatizar tareas. No hace falta ser un profesional del Vba (Visual Basic for Applications) para automatizar tareas sencillas con macros.
Así que supongamos que hemos desarrollado una macro para formar la fuente de la selección a negrita (bold) y el fondo de las celdas a gris.
La forma más fácil es utilizar la grabadora de macros.




El resultado es el siguiente



Cambiamos el nombre de la macro a N_gris, y eliminamos la primer línea de la macro, para que podamos aplicarla a cualquier rango que elijamos en la hoja



Sub N_gris()
'
' Macro1 Macro
' Macro grabada el 05/02/2007 por JLD
'

'
Selection.Font.Bold = True
With Selection.Interior
.ColorIndex = 15
.Pattern = xlSolid
End With
End Sub


Para poder usarla con facilidad asociamos una combinación de teclas a la macro (Herramientas—Macros—Opciones)




Ahora tenemos una macro que nos permite aplicar los formatos pulsando Ctrl+Mayúsculas+N a cualquier rango que hayamos seleccionado.

Para usar esta macro en hojas de otros cuadernos podemos:

1 – Abrir el cuaderno donde grabamos la macro. De esta manera estará disponible para todos los cuadernos abiertos en la sesión.

2 – Guardar la macro en el cuaderno Personal.xls. Excel crea este cuaderno automáticamente la primera vez que grabamos una macro en él. Normalmente este cuaderno está oculto, pero las macros que contiene están disponibles en cada sesión de Excel.

Para crear Personal.xls, simplemente grabamos una macro en él (basta con activar la grabadora e inmediatamente terminar la grabación)




Una vez hecho esto, podemos ver en la ventanilla Proyectos el Personal.xls




Copiamos la macro a un módulo de Personal, y la macro estará disponible cada vez que iniciemos una sesión de Excel.


Supongamos ahora que queremos distribuir nuestra macro a otros usuarios. Una posibilidad es darles una copia del cuaderno con la macro. Estos usuarios podrán luego copiar la macro a su propio Personal.

Otra posibilidad, más eficiente, en guardar la macro como complemento (Add in) y guardarlo en una carpeta pública, de donde cada usuario autorizado podrá instalarlo.
Mostraremos esta técnica en la próxima nota.

Technorati Tags:

viernes, febrero 02, 2007

Cálculo automático y manual en Excel

Hace un tiempo que me vengo prometiendo a mi mismo publicar una nota sobre velocidad de cálculo en Excel. La idea surgió, como todas las ideas que tengo en estos últimos tiempos, de los problemas con los que nos enfrentamos en mi empresa para implementar el nuevo sistema de información (Oracle Applications).
Para poner en marcha el nuevo sistema, debimos transferir grandes masas de datos del sistema anterior. En muchos casos los datos originales debieron pasar algún tipo de transformación. Por ejemplo, los números de catálogo pasaron de 9 cifras a un número variable cifras.
Excel suele ser la herramienta preferida para este tipo de transformaciones. Funciones como BUSCARV, INDICE y COINCIDIR fueron usadas con mucha intensidad.
Ahora imagínense una tabla de 16000 filas y 10 columnas. En una de las columnas ponemos una fórmula con BUSCARV con coincidencia exacta. Cada cambio que hace que Excel recalcule todas las fórmulas en la hoja, puede detener el trabajo por varios minutos. Esto puede suceder cuando usamos Autofiltro y cambiamos el criterio de filtrado.

Básicamente hay dos formas de enfrentarse con este problema:

1 – Cuando Excel comienza a recalcular hojas "pesadas", veremos en el ángulo inferior izquierdo de la hoja el porcentaje de avance del cálculo.




Apretamos ESC. Excel detiene el cálculo y pone un aviso que debemos completar el cálculo



2 – Pasar de cálculo automático a cálculo manual. Para hacer esto, usamos el menú Herramientas—Opciones y el diálogo que se abre vamos a la pestaña Calcular. Allí marcamos la opción Manual.




Hay que tomar en cuenta que este cambio afectará a todos los cuadernos abiertos en la sesión.

Para forzar el cálculo usamos F9 (para recalcular todos los cuadernos abiertos) o Shift+F9 para recalculas sólo el cuaderno activo.




Technorati Tags: