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.
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.
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”.
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