Insertar imágenes en Excel usando VBA y macros y dejar las imágenes guardadas en el mismo archivo

En un tutorial anterior, vimos cómo insertar imágenes en Excel, incluso vimos la manera de que las imágenes insertadas se ajustaran al tamaño de las celdas. Tenemos una carpeta donde almacenamos las imágenes a insertar y desde Excel, usando VBA y macros mandamos llamar las imágenes.

No se puede mostrar la imagen vinculada

Las imágenes del ejemplo están en una carpeta llamada Coches, misma carpeta está al mismo nivel que nuestro archivo con las macros.

Las imágenes a insertar en Excel deben estar la carpeta Coches.

Figura 1. Las imágenes a insertar en Excel deben estar la carpeta Coches.

Ver video Insertar imágenes en Excel usando VBA y macros y dejar las imágenes guardadas en el mismo archivo

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

En el archivo de Excel, en la columna A están los nombres de los archivos. Lo que la macro hace es tomar el nombre de la primera columna y busca una imagen en formato .JPG en la carpeta Coches, y si encuentra la imagen la inserta en la columna B; así lo hará con los diferentes nombre que encuentre en la primera columna.

Las imágenes se insertarán en la columna B, en base a los nombres de la columna A.

Figura 2. Las imágenes se insertarán en la columna B, en base a los nombres de la columna A.

Sin embargo, cuando insertamos las imágenes en el archivo y después le cambiamos el nombre a la carpeta o enviamos el archivo con las imágenes por correo electrónico, al abrir el archivo aparece un mensaje que dice “No se puede mostrar la imagen vinculada. Puede ser que hay movido, cambiado de nombre o eliminado el archivo. Compruebe que el vínculo señala al archivo y ubicaciones correcto”.

 Las imágenes no se muestran porque le cambiamos el nombre a la carpeta de las imágenes.

Figura 3. Las imágenes no se muestran porque le cambiamos el nombre a la carpeta de las imágenes.

Lo anterior sucedió ya que utilizamos el método Pictures.Insert en la macro para insertar imágenes. Y aunque dicho método es el mismo que se usa cuando insertamos imágenes en Excel desde la pestaña Insertar (al grabar una macro con la grabadora), cuando lo usamos directamente en una macro las imágenes como vimos se quedan vinculadas.

Insertar imágenes y que queden guardadas en el archivo

Al recibir los comentarios de personas que deseaban usar mi ejemplo, pero a la vez también enviar el archivo por correo y que las imágenes no se pierdan, me puse a investigar y encontré que existe un método mejor para insertar imágenes y que las imágenes se queden guardadas en el archivo.

En programación VBA existe un método llamado AddPicture aplicado a la colección Shapes o formas, y por mucho éste método es mejor que Pictures.Insert. La ventajas del método Shapes.AddPicture son:

    • LinkTofile. Nos permite que la imagen insertada no se vincule con el archivo.
    • SaveWithDocument. Permite que la imagen se guarde dentro del archivo del Excel.
    • Top. Podemos alinear la imagen al borde superior de una celda.
    • Left. Alineamos la imagen al borde izquierdo de una celda.
    • Width. El ancho de la imagen lo definimos que sea el ancho de una celda.
    • Heigth. El alto de la imagen lo ajustamos al alto de una celda.

Y como ves, este nuevo método nos ayudará a que nuestro archivo con imágenes insertadas, pueda ser portado a otra PC o enviado por correo electrónico.

Código VBA de la macro

'EXCELeINFO
'MVP Sergio Alejandro Campos
'http://www.exceleinfo.com
'https://www.youtube.com/user/sergioacamposh
'
Sub InsertarImagenes_2shapes()
'
'Declaramos variables
Dim RutaActual As String
Dim RangoImagen As Range
Dim shp As Object
Dim RutaCompleta

For Each shp In ActiveSheet.Shapes
    If shp.Name = "ImagenUno" Then
    Else
        shp.Delete
    End If
Next

'La variable RutaActual guardará la ruta completa donde está el archivo
RutaActual = ThisWorkbook.Path

'Desactivamos la actualización de pantalla
Application.ScreenUpdating = False

'Elegimos la celda B3
ActiveSheet.Range("B8").Select

'Recorremos cada fila mientras haya datos en la columna A
Do While ActiveCell.Offset(0, -1).Value <> Empty
    
    Set RangoImagen = ActiveCell.Offset(0, -1)
    
    'Insertamos la imagen que corresponda al nombre de la columna A
    'ActiveSheet.Pictures.Insert(RutaActual & "\Coches\" & RangoImagen.Value & ".jpg").Select
    ''''''''''''''''''''''''''''''''''''''''
    RutaCompleta = RutaActual & "\Coches\" & RangoImagen.Value & ".jpg"
    With ActiveSheet.Shapes.AddPicture(Filename:=RutaCompleta, linktofile:=msoFalse, _
        SaveWithDocument:=msoCTrue, Left:=0, Top:=0, Width:=-1, Height:=-1)
        .LockAspectRatio = 0
        .Top = ActiveCell.Top
        .Left = ActiveCell.Left
        .Width = ActiveCell.Width
        .Height = ActiveCell.Height
    End With
    ''''''''''''''''''''''''''''''''''''''''
    
    'Activamos la siguiente fila
    ActiveCell.Offset(1, 0).Select
    
Loop

Range("A2").Select
Application.ScreenUpdating = True

'Call FitPic

End Sub

Descarga el archivo y las imágenes de ejemplo

Descargar el ejemplo Insertar imágenes en Excel_3 – EXCELeINFO.zip

You may also like...