domingo, 17 de octubre de 2021

49 - Catálogo en Excel, con imágenes externas.

 En esta entrada veremos una manera de crear un catálogo con imágenes en Excel.

Vamos a crear en primer lugar, una tabla de productos donde guardaremos algunos campos como Código, Descripción, Precio, y otros.


Si el código del producto coincide con el nombre de la imagen, no hará falta agregar nada más. Y las instrucciones para insertar la imagen serán las siguientes:

'el nombre de la imagen se toma de la col D (código)

 archi = ruta & Cells(mifila, 4) & ".jpg"

ActiveSheet.Pictures.Insert(archi).Select 

En cambio si los nombres de los archivos de imagen no coinciden con el código, tendremos que agregar otra columna para guardar ese nombre, con su extensión o no.

    'o el nbre se lo toma de la col H que ya tiene la extensión

    archi = ruta & Cells(mifila, 8)

   ActiveSheet.Pictures.Insert(archi).Select


NOTA: si en la tabla de Productos, los nombres de archivo no contienen la extensión, debe ser considerada en el código. Por ejemplo:

                    archi = ruta & Cells(mifila, 4) & ".jpg"

La ruta de la carpeta que contiene los archivos de imagen puede quedar establecida en el código. Por ejemplo:
ruta = ThisWorkbook.Path & "/imagenes/"

o ser tomada desde alguna celda, por ejemplo M2 de la hoja activa:
                    ruta = Range("M2")

El proceso puede ejecutarse desde un botón de formulario o con un atajo de teclado. En ambos casos desde el Editor se insertará un módulo y allí se copiará la siguiente macro, haciendo los ajustes mencionados anteriormente:

 

Sub buscaimagen()    'esta macro se ejecuta teniendo de antemano la ruta

                                   'de la carpeta que contiene las imágenes

'se borran imágenes anteriores

On Error Resume Next

For Each sh In ActiveSheet.Shapes

    If Left(sh.Name, 7) = "Picture" Then sh.Delete

Next sh

 

ruta = ThisWorkbook.Path & "/imagenes/"       'ruta preestablecida

'ruta = Range("M2")                                           ' o contenido de una celda

 

'fila de inicio

mifila = 7

 

'recorre la col que tiene las direcciones de los archivos y los ubica

While Cells(mifila, 4) <> ""

    'el nombre de la imagen se toma de la col D (código)

    'archi = ruta & Cells(mifila, 4) & ".jpg"

    'o el nbre se lo toma de la col H que ya tiene la extensión

    archi = ruta & Cells(mifila, 8)

   

    'evaluar si existe el archivo en carpeta, sino continuar con el resto

    If Dir(archi) = "" Then GoTo sigo


    ActiveSheet.Pictures.Insert(archi).Select

   

    'las dimensiones son las de la celda en fila activa y col F

    'se incrementa el margen en 1 y se disminuye la dimensión en 1 para mostrar el borde.

    With Selection.ShapeRange

        .Left = Cells(mifila, 6).Left + 1

        .Top = Cells(mifila, 6).Top + 1

        .LockAspectRatio = msoFalse             'NO mantiene proporción

        .Width = Cells(mifila, 6).Width - 1

        .Height = Cells(mifila, 6).Height - 1

    End With

sigo:

    'pasa a fila siguiente

    mifila = mifila + 1

Wend

'fin del proceso. se posiciona en alguna celda de encabezado.

[E6].Select

Exit Sub

 

sinImagen:

MsgBox "Se presentó un problema con la ruta o nombre de archivo", , "ERROR"

End Sub



ATENCIÓN: a la macro Sub buscaImagen( ) que se encuentra en el libro, le faltan las instrucciones marcadas de color.

 NOTA: Con este modo de insertar imágenes, se puede imprimir (Pdf o impresora) pero si se envía el li bro o se lo coloca en alguna ruta de descarga (como en este caso) deberá adjuntarse también la carpeta con los archivos que deberán ser colocados en la misma ruta que se estableció en la macro. En este caso lo recomendable es dejarla indicada en alguna celda.

Ya veremos en otros ejemplos cómo insertar y guardar en el mismo libro los archivos. Esto solo es recomendable cuando el peso de las imágenes no impidan el buen manejo del libro.

Descargar archivo de ejemplo desde aquí.

Ver video N° 49