Macro para mostrar una imagen

En una celda (A2) tengo una fórmula que da como resultado un nombre. Además tengo un grupo de imágenes que está guardado en la misma carpeta que el libro. El nombre que da como resultado la fórmula de esa celda es siempre uno de los nombres de las imágenes que tengo en la carpeta. Es decir, si las imágenes se llaman "imagen1.png", "imagen2.png", etc, el resultado de la fórmula es imagenX. Lo que quiero es que cuando se calcule el resultado de la celda A2 y aparezca un nombre se cargue al lado la imagen que le corresponde.

He visto en alguna web la instrucción LoadPicture(ActiveWorkbook. Path & Target & ".jpg") pero soy muy novato en vba y no sé cómo utilizarla en este caso. ¿Cómo debería ser la macro?

Tampoco sé si hay alguna restricción en excel en cuanto al formato de la imagen que se carga, dado que la instrucción que vi hace referencia a imágenes .jpg y las mías son .png. ¿debería cambiar el formato para poder cargarlas?

1 respuesta

Respuesta
1

Puedes cargar cualquier imagen solamente tienes que indicar la extensión, En la celda A2, tienes que poner el nombre de la imagen y su extensión, por ejemplo:
Foto1.png
En la siguiente macro, debemos especificar la celda o las celdas que utilizas en tu fórmula de la celda A2, por ejemplo, si en tu fórmula tienes esto:
A B C
1 Nombre Imagen Número
2 ="imagen" & C2 & ".png" 1
3
El resultado es:
A B C
1 Nombre Imagen Número
2 imagen1.png 1
3
Entonces la celda C2 es la que cambias, por lo que en la macro, en la siguiente línea debes poner la celda C2
If Not Intersect(Target, Range("C2")) Is Nothing Then
Cada que cambies el valor en la celda C2, se ejecutará la macro

Sigue las Instrucciones para poner la macro en worksheet
1. Abre tu hoja de excel
2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
3. Del lado izquierdo dice: VBAProject, abajo dale doble click a worksheet(tu hoja)
4. Del lado derecho copia la macro

Private Sub Worksheet_Change(ByVal Target As Range)
'por.dam
If Not Intersect(Target, Range("C2")) Is Nothing Then
    imagen = Range("A2")
    carpeta = ThisWorkbook.Path
    arr = Range("B2").Top
    izq = Range("B2").Left
    If Range("B2") <> "" Then
        ActiveSheet.Shapes(Range("B2")).Delete
    End If
    Range("B2").Clear
    Range("B2").Select
    ActiveSheet.Pictures.Insert(carpeta & "\" & imagen).Select
    With Selection
        .Placement = xlMoveAndSize
        .PrintObject = True
        .ShapeRange.LockAspectRatio = msoFalse
        .ShapeRange.Top = arr
        .ShapeRange.Left = izq
        .ShapeRange.Height = 115#
        .ShapeRange.Width = 99#
        .ShapeRange.Rotation = 0#
    End With
    Set shapObject = Application.Selection
    Range("B2") = shapObject.Name
    Range("A2").Select
End If
End Sub

Prueba y me comentas

Saludos. DAM
Si es lo que necesitas.

Muchas gracias por tu rápida respuesta.

Va perfecto como tú lo has puesto. Además me deja posibilidades de ajuste como el tamaño en el que se muestra la imagen o la posición, que es más de lo que esperaba.

Mi problema es que el resultado de la celda A2 no depende de cambiar un valor en una celda determinada sino que depende de un conjunto de fórmulas que empieza por una selección múltiple. Tengo varias listas desplegables y en función de la combinación de valores que se elija para cada lista hace una búsqueda en una tabla y da como resultado el nombre de una imagen. Con sólo cambiar un valor de una de las listas puede cambiar el nombre en A2.

¿Sería posible que se activara la macro no con el cambio del valor de C2 sino con el cambio de valor en A2?

Por otra parte, las imágenes que cargo tienen el fondo transparente y se observa en la celda B2 una especie de contador. A cada cambio de valor se carga la nueva imagen y en la celda B2 aparece "4 Imagen", "5 Imagen", ... ¿Se puede eliminar ese contador?

Muchas gracias de nuevo. Tengo que revisar todas las instrucciones de la macro para entenderlo bien pero ya he aprendido algo muy útil.

Puedes poner la fórmula que tienes en A2

El "contador" no lo puedes quitar, puedes hacer 2 cosas o le cambias el color de letra, a la celda A2 a sin color o pones el "contador" en otra celda.

Espero tus comentarios, para hacer los ajustes a la macro

Saludos. DAM

La fórmula que tengo en A2 es la siguiente:

=SI(ESERROR(DESREF(BD!$A$1;COINCIDIR(C2;BD!$B$2:$B$262;0);0));"Vacío";DESREF(BD!$A$1;COINCIDIR(C2;BD!$B$2:$B$262;0);0))

Creo que no entiendo bien lo que me indicas. ¿Se puede poner la fórmula dentro de la macro?

Ya cambié la macro para que le añada la extensión sin tener que mostrarla en la celda A2

El contador habría que colocarlo en otra celda que no esté a la vista. He probado a cambiarle el color de letra a la celda y centrar el texto pero vuelve a ponerlo en negro y a la izquierda cada vez.

Mejor envíame tu archivo y hago las correcciones.

Dime en qué celda quieres el “contador”

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas