En el post mencionado uso Vba (macros) para incrustar las imágenes guardadas en una carpeta en la hoja. La técnica consiste en guardar las direcciones de las imágenes en una tabla de Excel. En otra hoja el usuario introduce un texto que hace referencia a la dirección de la imagen y de esta manera, con el código, introducimos la imagen en la hoja de Excel. Esto tiene muchas ventajas pero presenta la dificultad de tener que actualizar la lista de referencia-dirección de la imagen.
Usando Power Query podemos crear una consulta que mantenga actualizada la lista de direcciones, en lugar de tener que usar todo tipo de códigos complicados.
Supongamos que queremos construir un modelo donde al ingresar el usuario el nombre de un país en la celda contigua aparece la bandera del país elegido. En nuestro ejemplo tenemos todos los archivos de las imágenes de las banderas en la carpeta “Banderas”
El proceso lo muestro en este video
Una vez creada la conexión, solo tenemos que apretar el botón Actualizar para mantener la tabla de referencias actualizada
El próximo paso es crear el nombre definido "rngPaisDireccion" que se refiere a la tabla completa, sin los encabezados
Creamos un nombre definido que se refiere a todas las celdas de la columna Pais ("PicList"), que luego usaremos en el código
Como ven, ya hemos agregado dos botones para activar las macros. Una para insertar las banderas correspondientes a los nombres de los países que ingresemos en la columna A y otro para remover los países que ingresamos y las imágenes de sus banderas.
El código para insertar las banderas es
Sub insert_pic()
Dim strFileName As String
Dim iTop As Integer
Dim rngCellPic As Range
'comprobar que se introdujeron paises
If WorksheetFunction.CountA(Range("PicList")) < 1 Then
MsgBox "No se anotaron paises", vbCritical
Exit Sub
End If
Application.ScreenUpdating = False
For Each rngCellPic In Range("PicList")
'defiinir alto de fila a 60 y centrar
With rngCellPic
.RowHeight = 60
.VerticalAlignment = xlCenter
End With
'introducir la bandera
strFileName = WorksheetFunction.VLookup(rngCellPic, Range("rngPaisDireccion"), 2, 0)
ActiveSheet.Shapes.AddPicture Filename:=strFileName, _
linktofile:=msoFalse, _
savewithdocument:=msoCTrue, _
Left:=rngCellPic.Offset(0, 1).Left + 15, _
Top:=rngCellPic.Offset(0, 1).Top + 5, _
Width:=50, Height:=50
Next rngCellPic
Application.ScreenUpdating = True
End Sub
El código para limpiar todas las filas de la tabla es el siguiente
Sub clean_all()
Dim rngCell As Range
Dim shpImage As Shape
Application.ScreenUpdating = False
'delete pictures
For Each shpImage In shList.Shapes
If shpImage.AlternativeText <> "NoDelete" Then shpImage.Delete
Next shpImage
For Each rngCell In Range("PicLIst")
rngCell.RowHeight = 14.25
Next rngCell
On Error Resume Next
Range("PicList").EntireRow.Delete
On Error GoTo 0
Application.ScreenUpdating = True
End Sub
El modelo en funcionamiento
Gracias amigo, se me hizo un poco complicado el tutorial (en especial por que nunca he usado Power Query). por cierto una pregunta, sin usar este último complemento (Power Query) se puede hacer algo similar?
ResponderBorrarSi y en el blog hay varios posts sobre el tema. Fijate en el enlace en la primer frase del blog. Además puedes hacer una búsqueda en el blog (con la casilla de búsqueda) con la palabra "catálogo".
ResponderBorrarGracias amigo, buen tutorial, y el video ayuda mucho para seguirlo paso a paso
ResponderBorrar