A diario recibo bastantes consultas directamente al buzón de contacto de Excel Signum, hace unos días, un lector realizaba una consulta para resolver una situación problemática de una idea que quería realizar.

Se proponía realizar su currículum en Excel, algo que le pareció interesante, sobre todo por la versatilidad para mostrar información, ya que podría incluir cronogramas, gráficos, diseños, cálculos, porcentajes (incluso vídeos).

Dado que aún estaba comenzando, tenía la duda de cómo realizar una macro para poder insertar su fotografía, y además modificar tamaños y formatos.

Normalmente las imágenes se suelen insertar en los formularios para realizar programas, como por ejemplo, de almacén, donde la fotografía del artículo acompaña a la descripción del mismo. Además la imagen se suele almacenar en una carpeta o directorio desde el cual cuando el formulario se abra cargue la foto, de otra forma, si almacenásemos cientos imágenes en un archivo, pesaría demasiado y su gestión sería inviable.

Pero para este caso, lo que se busca es insertar una fotografía en la propia hoja Excel (que la almacene) y que además cada vez que elija una nueva, elimine la anterior.

Para ello, antes de nada, debemos insertar en nuestra hoja un control ActiveX (imagen).

INSERTAR FOTOGRAFÍA EN HOJA EXCEL EN UN CONTROL DE IMAGEN

Una vez realizado esto, procedemos a introducir en nuestro editor de VBA el siguiente código en un módulo estándar:

Sub INSERTA_FOTO()
Dim foto As Variant
'Abrimos directorio y buscamos solo archivos de imagen
foto = Application.GetOpenFilename(FileFilter:= _
"Imagen (*.gif;*.jpg;*.jpeg;*.bmp), *.gif;*.jpg;*.jpeg;*.bmp", _
Title:="Seleccionar imagen", MultiSelect:=False)
'si no elegimos ninguna fotografía entonces salimos del proceso
If foto = False Then
Exit Sub
End If
'Si elegimos la foto pero antes ya teníamos otra, antes de insertar, borramos la anterior
With Sheets(1)
If Not IsEmpty(.Image1.Picture) Then
.Image1.Picture = Nothing
End If
'luego subimos la foto.
.Image1.Picture = LoadPicture(foto)
' y le damos formato, en este caso Strech (justificamos la imagen)
.Image1.PictureSizeMode = fmPictureSizeModeStretch
' si deseamos dar formato al ancho y al alto, lo podemos hacer asi
.Image1.Width = 120
.Image1.Height = 120
End With
End Sub

Ahora que ya lo tenemos, podemos elegir entre nuestros archivos la imagen que nos interesa y además darle formato.

Con esta propiedad estamos ajustando la imagen al control ActiveX:

.Image1.PictureSizeMode = fmPictureSizeModeStretch

Pero también podemos subir la imagen sin ajustar:

.Image1.PictureSizeMode = fmPictureSizeModeClip

O realizando un zoom del 50%, por ejemplo:

.Image1.PictureSizeMode = fmPictureSizeModeZoom = 50

Y eso es todo, ahora nuestro compañero ya tiene la herramienta perfecta para seleccionar y subir su fotografía en su futuro currículum.

El resultado sería un pequeño formulario para subir nuestra imagen, (en este caso os dejo una vista panorámica desde el Duomo, en Florencia. Qué gran viaje 🙂

INSERTAR FOTOGRAFÍA EN HOJA EXCEL EN UN CONTROL DE IMAGEN1

Aunque considero que no es necesario, si queréis incluir un botón para eliminar la foto, el código sería este:

Sub ELIMINA_FOTO()
'Formulario en blanco
With Sheets(1)
.Image1.Picture = Nothing
End With
End Sub

Y este sería el pequeño ejercicio de hoy, espero que os resulte de interés y os pueda servir en alguno de vuestros proyectos, o currículums 🙂

* Nota: los formatos de imagen «png» y «tiff» no son soportados por VBA, por ello no los incluyo en el ejemplo. Existen algunos desarrollos con el API de Microsoft para poder subir archivos png, pero eso ya lo trataré en otro post.

Descarga el archivo de ejemplo pulsando en: INSERTAR FOTOGRAFÍA EN HOJA EXCEL EN UN CONTROL DE IMAGEN

 

Comparte este post