Registros con fotos en Excel y VBA

Partiendo de una hoja en la que hay registrados cientos de datos, una práctica habitual consiste en elaborar una pequeña ficha en la cual seleccionaremos el nombre de un empleado, de un producto o un ID y el resto de los datos se rellenarán de manera automática. La función que se emplea para hacer esto es la conocida BUSCARV, también podemos usar INDICE y COINCIDIR, pero por la estructura de la base de datos es más que suficiente usar BUSCARV.

Más allá de lo bonito o feo que pueda resultar dicha práctica, el objetivo es alcanzar la destreza suficiente a la hora de usar la función BUSCARV 

Pero queremos ir más allá, incluir en esa ficha una fotografía del actor. (La base de datos es un registro de actores y actrices de la serie Juego de Tronos).

Para poder conseguirlo usaremos algunas líneas muy sencillas de programación para macros en VBA (Microsoft VBA – Visual Basic para aplicaciones), pero antes debemos hacer algunas cosas (6):

1. Si no lo hemos hecho antes, convertir el rango en tabla y darle un nombre. Un nombre sencillo que sea fácil de recordar (Basededatos).

 

2. Guardar el libro como Libro de Excel habilitado para macros (*.xlsm)

3. Debemos preparar las imágenes. Tienen que tener el mismo tamaño, estar todas en la misma carpeta, y con el mismo formato, por ejemplo todas las imágenes estarán en la carpeta fotos, son de un tamaño de 6x6cm y en formato *.jpg

4. Agregaremos una nueva columna a la tabla que llamaremos Actor ID. Esta columna contendrá una referencia que identifique a cada actor y que coincidirá con el nombre del archivo fotográfico (Esto último no es necesario pero si facilita mucho las cosas). Necesitamos crear esa columna para utilizarla como referente a la hora de nombrar la imagen.

5. Creamos el lugar en el que irá la imagen. Insertaremos una forma, una forma cuadrada por ejemplo, que mida 6x6cm que es el tamaño que hemos seleccionado para la imagen. Sin fondo y con borde. Luego nombramos la forma, en mi caso la llamaré «foto».

6. Finalmente, nos situaremos en una celda de la hoja en la que está la ficha y haremos un BUSCARV que nos devuelva un valor de la columna Actor ID según el nombre y el concatenaremos los caracteres .jpg, con ello conseguimos un valor coincidente con el nombre de las imágenes. Para que no se vea esta celda, pondremos la fuente en blanco o podemos esconder la fila. Utilizaremos BUSCARV, de la siguiente manera:

=BUSCARV(D5;Basededatos;8;FALSO)&».jpg»

Lo que nos quiere decir es, buscaremos el valor que está en la celda D5, en la tabla «Basededatos» que se encuentra en la columna 8, necesitamos su valor exacto. A continuación concatenamos con el carácter & la extensión «.jpg»

Comprobado que funciona todo bien, cambiaremos el color a la fuente, y le pondremos color blanco así no se vera, también podemos ocultar la fila…. todo es una cuestión de formato, así que libre elección.

Lo que hemos estado haciendo hasta ahora es preparar el libro y los recursos necesarios para poder agregar imágenes a la ficha, ahora queda el VBA. Para ello debemos entrar al entorno de programación, nos situamos en la pestaña correspondiente a la hoja de Ficha actor_actriz y con el botón derecho del ratón abrimos el menú contextual y de las diferentes opciones seleccionamos Ver código para acceder a la ventana de programación VBA.

La primera acción que debemos realizar es cambiar algunos parámetros de la ventana de la derecha, por defecto aparece así:

Pero lo queremos así:

Todo los cambios que realicemos (Change) se producirán en la actual hoja de trabajo (Worksheet). Las líneas de programación que vayamos agregando irán entre Private….. y End Sub

Lo primero que haremos será crear una variable, da igual el nombre pero es importante que sea comprensible por nosotros. Esta variable definirá la ubicación exacta en nuestro ordenador de la carpeta que contiene los archivos con imágenes, también podemos usar una URL, si esta carpeta se encuentra en un servidor, en la nube, etc. a continuación se le indica la hoja en la que debe agregarse la imagen y finalmente que se tenga en cuenta el valor que aparece en la celda G14, recuerda que es en esta celda donde aparece el nombre de cada archivo de fotografía.

rutaimagen = «C:\Users\minombre\pract\fotos\» & Sheets(«Ficha actor_actriz»).Range(«G14»).Value

En una segunda línea indicamos que en la hoja activa (ActiveSheet) y más concretamente en la forma que he llamado «foto» (Shape) deben aparecer las imágenes que antes he referenciado con la variable «rutaimagen»

ActiveSheet.Shapes(«foto»).Fill.UserPicture (rutaimagen)

En conjunto debería quedar algo así:

Guardamos, probamos y verificamos que funciona:

Pero que sucede si seleccionamos un nombre y no tenemos foto, o si la busca y no la encuentra…

Este error lo podemos salvar haciendo algo parecido a la función SI.ERROR, es decir, si una fotografía no la encuentra, que muestre una alternativa.

Situaremos la siguiente línea antes de la definición de la variable:

On Error GoTo Errores

Y después de la definición de la variable, el lugar en el que queremos que nos sitúe las imágenes y de la línea Exit Sub pondremos:

Errores:
ActiveSheet.Shapes(«foto»).Fill.UserPicture («C:\Users\minombre\pract\fotos\noimagen.jpg»)

Así que las líneas quedarán del siguiente modo:

Y eso es todo.

Las posibilidades son enormes, podemos agregar imágenes a nuestro Excel en función del valor de una celda, podemos agregar fotos de empleados, clientes, productos, códigos QR, etc.

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información

ACEPTAR
Aviso de cookies
error: