sábado, mayo 02, 2009

Catálogo de Imágenes en Excel – otra versión

Crear catálogos de imágenes en Excel es uno de los temas más consultados en este blog. Hace un poco más de dos años y medio publiqué la primer nota sobre base de datos de imágenes que se convirtió en una de las más leídas del blog.

La técnica empleada para crear el catálogo de imágenes en Excel no es trivial y a principios de este año publique una nota aclaratoria que incluye un enlace para descargar una animación del proceso.

Además de los problemas potenciales que señalaba en la nota original, si guardamos las imágenes en el cuaderno, tal como muestra la técnica empleada en la nota original, el archivo tiende a volverse muy “pesado”, en especial si guardamos imágenes de alta resolución.

En esta nota mostraremos una técnica distinta, donde las imágenes están guardadas en alguna carpeta del sistema (computador personal o red) y sólo usamos Excel para mostrarlas de acuerdo a un número de código que se haya elegido en alguna celda.

Empezamos por guardar las imágenes en una única carpeta. Por comodidad las pondré en D:\catalogo



Catálogo de Imágenes en Excel

En el siguiente paso construimos el cuaderno Excel que tendrá dos hojas, Lista y Catalogo.
Como su nombre indica, en la primer hoja pondremos la lista de imágenes pero en lugar de guardar la imagen en la hoja pondremos la referencia a la dirección en el sistema



Catálogo de Imágenes en Excel

Podemos ver que los valores en la primer fila no son números de código y dirección en el disco duro. La función de estos valores será explicada más adelante.

Ahora creamos dos rangos dinámicos que encapsularemos en dos nombres

imagenes =DESREF(Lista!$A$1,0,0,CONTARA(Lista!$A:$A),1)

path_imagenes =DESREF(Lista!$A$1,0,0,CONTARA(Lista!$A:$A),2)

Estos nombres se adaptan automáticamente a la cantidad de filas en la lista usando la técnica que ya hemos mostrado en varias oportunidades. “Imagenes” se refiere al rango de la columna A que contiene valores; “path_imagenes“ se refiere al rango A:B con el número de filas correspondiente. Estos nombres serán usados en la hoja “Catalogo” donde mostramos las imágenes.

En la hoja Catalogo creamos una lista desplegable usando la opción Lista de Validación de Datos


Catálogo de Imágenes en Excel

Los valores de la lista desplegable están definidos por el rango dinámico “imagenes”

Catálogo de Imágenes en Excel

Como pueden ver, el primer valor de la lista sirve como indicación al usuario qué es lo que tiene que hacer. Los valores de la lista desplegable sirven como argumentos en para la función BUSCARV que ponemos en la celda C3
=BUSCARV(A3,path_imagenes,2,0)
Esta fórmula da como resultado la dirección de la imagen (que pusimos en la hoja Lista).

Nuestro próximo paso es poner en la hoja un medio de mostrar la imagen correspondiente al código que hayamos elegido. Activamos la barra de herramientas Cuadro de Controles y elegimos el control Imagen



Catálogo de Imágenes en Excel

Ponemos el control en una posición cercana a la lista desplegable y para mejorar el aspecto de la hoja quitamos las líneas de división. La posición del control no es casual y nos sirve para ocultar la fórmula que hemos puesto en C3.


Catálogo de Imágenes en Excel

Ahora necesitamos un método para cargar la imagen correspondiente, lo que haremos con una macro, y un evento que haga correr la macro cuando el usuario elige un número de código.

Sub show_pic() es la macro para cargar la imagen en el control

Sub show_pic()

Dim PicAddress

PicAddress = Sheets("Catalogo").Range("C3").Value

If IsError(PicAddress) Then
Sheets("Catalogo").Image1.Picture = Nothing
Else
Sheets("Catalogo").Image1.Picture = LoadPicture(PicAddress)
End If

End Sub

Esta macro va en un módulo común del editor de VBa.
Para que la macro corra cuando se elige un número de código programamos este evento en el módulo de la hoja Catalogo

Private Sub Worksheet_Change(ByVal Target As Range)
Dim celControl As Range

Set celControl = [A3]

If Union(Target, celControl).Address = celControl.Address Then show_pic

End Sub


Elegimos un número de código en la lista desplegable, lo que dispara la macro que carga la imagen correspondiente en el control


Catálogo de Imágenes en Excel

La ventaja de esta técnica reside en que al no guardar las imágenes en un cuaderno de Excel, éste es muy estable y nos permite usar imágenes de alta resolución.

Finalmente agregaremos dos mejoras a nuestro modelo. Tenemos que evitar que el usuario guarde el cuaderno con una imagen cargada en el control. Esto puede suceder de dos maneras:

1 – que el usuario intente cerrar el cuaderno y Excel le pida guardarlo antes de cerrarlo (y que el usuario decida guardarlo)

2 – que el usuario decida guardar el cuaderno por propia iniciativa.

La idea no es evitar que el usuario guarde el cuaderno, sino que al hacerlo no haya ninguna imagen cargada en el control.
Para lograr esto programamos dos eventos en el objeto ThisWorkbook


Catálogo de Imágenes en Excel


Workbook_BeforeClose

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Sheets("Catalogo").Image1.Picture = Nothing
Sheets("Catalogo").Range("A3").ClearContents
End Sub


Workbook_BeforeSave

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, _
Cancel As Boolean)
Sheets("Catalogo").Image1.Picture = Nothing
Sheets("Catalogo").Range("A3").ClearContents
End Sub


El ejemplo se puede descargar aquí. Para que el modelo funcione hay que reemplazar los valores del rango A2:B6 por referencias a archivos que existan en el computador o red del usuario.



Technorati Tags:

lunes, abril 27, 2009

Efectos especiales con bordes en Excel

En el trámite de preparar una nota sobre el uso de estilos en Excel, tema importante pero ampliamente ignorado por la mayoría de los usuarios, encontré como lograr un efecto que he visto en varios cuadernos de Excel pero nunca supe cómo hacerlo.

Me refiero a las celdas que aparecen como alto o bajo relieves. Una imagen vale más que cien palabras:



bordes en Excel efectos especiales

Para lograr este efecto todo lo que tenemos que hacer es poner un fondo gris a un área de celdas, asegurándonos de tener una columna de más a cada lado de la celda y una fila de más por encima y por debajo de las celdas en cuestión.


El fondo del área A1:C5 es gris 25%

bordes en Excel efectos especiales

La línea de los bordes izquierdo y superior son de color blanco y el color de los bordes inferior y derecho es gris 50%

bordes en Excel efectos especiales

Para lograr el efecto de bajo relieve sencillamente volvemos blanco el borde inferior y gris 50% el superior.


Aplicando esta técnica podemos crear una tabla como esta:


bordes en Excel efectos especiales

Debido al fondo gris del rango, las líneas de división se han vuelto invisibles. Si necesitamos agregar líneas divisorias podemos usar el estilo de línea más “liviano” (el primero que aparece de la lista de estilo en el Formato de Celdas y darle el color gris 25%

bordes en Excel efectos especiales

Estos efectos pueden conmover al más implacable de los jefes!


Technorati Tags:

jueves, abril 23, 2009

Tipos de usuarios de Excel

El título de esta entrada estaba destinado a ser “¿Qué tipo de usuario de Excel sos?”. El “sos” expresa toda mi argentinidad, pero me parecía un tanto discriminatorio para la mayoría de mis lectores, que no son argentinos.

De acuerdo a las estadísticas que me provee Statcounter, la mayoría de mis lectores son españoles, mexicanos y venezolanos. Así que consideré usar “¿Qué tipo de usuario de Excel eres?”. Pero no podía liberarme de cierta sensación de hipocresía, así que concluí con un título “neutro” como el que encabeza esta nota.

Empecemos por decir que todo usuario de Excel es de hecho un programador (me niego rotundamente a usar “desarrollador” como traducción de “developer”).

De hecho Excel es mucho más que simplemente una hoja de cálculos. En esto, y muchas cosas más, coincido con Stephen Bullen, Rob Bovey y John Green que en su Excelente libro “Professional Excel Development” consideran a Excel una plataforma para el desarrollo de aplicaciones. En la introducción del libro, los autores clasifican los usuarios de Excel en cinco distintos tipos:

• El usuario básico (basic Excel user)

• El usuario avanzado (Excel power user)

• El programador de Vba (Vba developer)

• El programador de Excel (Excel developer)

• El programador profesional de Excel (professional Excel developer)

Supongo que la mayoría de mis lectores caen dentro de las dos primeras categorías.
Dentro de ellas es posible definir sub categorías. Pero antes de ocuparnos de ese tema es interesante ver cómo definen Bullen, Bovey y Green las diferencias entre las últimas tres categorías.

Para ellos el programador de Vba se caracteriza por el uso intensivo y aún exagerado de código Vba en sus cuadernos Excel. Este usuario tiene buenos conocimientos, aunque no avanzados, de Vba y cree que las macros son la mejor solución para todo problema. Por lo general no conocen suficientemente las posibilidades de Excel lo que los lleva a preferir soluciones de Vba.

El programador de Excel, por lo contrario, usa intensivamente las funcionalidades de Excel y las potencia usando Vba a discreción. Estos usuarios son capaces de desarrollar modelos complejos y a la vez eficientes basándose principalmente en Excel , pero llegan a su límite cuando se trata de usar otras aplicaciones o lenguajes junto con Excel.

El programador profesional desarrolla sus modelos basándose principalmente en Excel, pero sabe combinarlo con otras aplicaciones y lenguajes.

Volviendo a las dos primeras categorías es posible, como señalaba más arriba, definir sub categorías.

El primer nivel de usuario básico, el principiante, es aquel que conoce los rudimentos de Excel y las funciones más sencillas, como SUMA, PROMEDIO, CONTAR, etc. Por lo general tiende a crear hojas que replican formularios que llevaba en forma manual. El énfasis está puesto en el formato de la hoja más que en la funcionalidad.

El segundo nivel de usuario básico, el intermedio, conoce y comprende el uso de funciones de búsqueda como BUSCARV, INDICE y COINCIDIR. Conoce y usa Autofiltro y esto lo lleva a entender la necesidad de organizar los datos en forma tabular (listas en términos de Excel 2003, tablas en términos de Excel 2007).

El primer nivel de usuario avanzado usa Excel tanto para crear modelos de cálculo como para administrar datos. Usa funcionalidades avanzadas como nombres (en especial para rangos dinámicos), Filtro Avanzado, Validación de Datos y Formato Condicional. Usa funciones como DESREF y SUMAPRODUCTO.

EL segundo nivel de usuario avanzado, el súper usuario, conoce y usa para sus modelos funciones matriciales y tablas dinámicas y, lo más importante, comprende cuando deben ser usadas. Además tiene ya suficiente conocimientos de Vba para agregar macros y tal vez desarrollar funciones definidas por el usuario (UDF) sencillas.

En resumen, las líneas demarcadoras entre las categorías de usuarios de Excel son:

Básico ----funciones de búsqueda--->Intermedio--->DESREF, SUMAPRODUCTO--->Avanzado--->tablas dinámicas--->Súper Usuario.

¿Qué criterios agregarían o cambiarían? ¿Qué tipo de usuario se consideran ustedes?




Technorati Tags: