Insertar imágenes un varios objetos desde un botón

Hola y gracias de antemano. Mi problema es el siguiente:


Tengo una planilla de 8 etiquetas y deseo insertar una imagen en cada una de ellas, pero dentro de un objeto (forma de la ficha insertar) para que al colocar la imagen, esta se dimensione de forma automática, sin embargo tras buscar en varios sitios encontré una macro que al dar clic sobre un botón se cambia la imagen, pero el resultado no es precisamente lo que deseo, ya que realmente necesito que haga lo siguiente:

1.- Que la macro no sólo aplique la imagen en el objeto que señale, sino en todos los de la hoja (una imagen por cada etiqueta = 8).
2.- Que al dar clic sobre el botón se salte el paso de seleccionar el objeto (En la macro que tengo si selecciono el objeto y doy clic en el botón puedo cambiar la imagen)
3.- Como mi hoja esta protegida con contraseña, que me permita realizar el cambio sin quitar la contraseña o sin quitarle la opción de mover objetos, ya que sí se mueven las imágenes o objetos por equivocación, pueden imprimirse chuecas o fuera del lugar que les asigne.

La macro que tengo es la siguiente, ya la probé y si funciona, nada más que primero hay que seleccionar o dar clic sobre el objeto y después sobre el botón. (En una hoja protegida no es posible seleccionar el objeto sin que se corra el riesgo de moverse).

Sub Macro2()
Dim ruta As String
ruta = Application.GetOpenFilename
On Error Resume Next
'Me gustaría poder seleccionar varios objetos sin darles clic a cada uno.
With Selection.ShapeRange.Fill
.Visible = msoTrue
.UserPicture ruta
.TextureTile = msoFalse
End With
End Sub


Espero haberme explicado bien, muchas gracias por su generoso apoyo.

1 respuesta

Respuesta
1

¿Y quieres una imagen diferente para cada objeto?

¿Y cómo se va a identificar la imagen que le corresponde a cada objeto?

Con la siguiente macro, se puede ir seleccionado una a una las imágenes que tienes en la hoja.

Pruébala y me comentas qué le falta para completar lo que necesitas.

Sub imagenes()
For Each imagen In Worksheets("Hoja1").Shapes
MsgBox imagen.Name
    Select Case Left(imagen.Name, 4)
        Case "Auto"
        Case Else
            imagen.Select
    End Select
Next
End Sub

Con esta instrucción, sirve para que no seleccione las imágenes que no quieres, sólo tienes que poner las 4 primeras letras del nombre de la image.

Select Case Left(imagen.Name, 4)
Case "Auto"

Primeramente deseo pedirte una disculpa por haberme demorado tanto en responder a la solución que tan gentilmente me has dado, he tenido algunos contratiempos y por ello me disculpo.

Hola Experto, la verdad no entendí muy bien tu respuesta porque no se como integrar la macro a la mia o como es que funciona por separado, ya que para probarla la aplique a un objeto y lo único que hace es mostrar un MsgBox nombrando los objetos que tengo en mi hoja, pero sin efecto alguno.

En respuesta a las preguntas que me hiciste, lo siguiente:

Y quieres una imagen diferente para cada objeto?

Y cómo se va a identificar la imagen que le corresponde a cada objeto?


Bueno, realmente la imagen es la misma en todas las etiquetas, pero quiero que haya una etiqueta en específico (Digamos que una Etiqueta base) que al seleccionarla esta me habrá el explorador de archivos para poder buscar o seleccionar la imagen deseada y esta a la vez se replique o copie en las demás etiquetas (objetos).

Pensé en un objeto porque en éste, la imagen se puede ajustar automáticamente y creo esto sería más práctico.

En la macro que le envíe pude lograr sin problema abrir el explorador en mis imágenes al seleccionar un objeto (etiqueta), no obstante lo que no he podido lograr es replicar esta imagen en los demás objetos.

Pensé en asignarle un nombre a cada objeto (les llame "LOGO1, LOGO2, LOGO3... LOGO8"), pero no tengo idea de que macro o código pueda copiar o replicar la imagen de mi objeto (Etiqueta base) a los demás objetos (LOGO1, LOGO2... LOGO8).

Esta es la macro integrada, lo que haces es poner la imagen en todos tus objetos de la hoja.

Sub pone_imagen()
Dim ruta As String
ruta = Application.GetOpenFilename
On Error Resume Next
For Each imagen In Worksheets("Hoja1").Shapes
    Select Case imagen.Name
        Case "Auto"
        Case Else
            imagen.Select
            With Selection.ShapeRange.Fill
                .Visible = msoTrue
                .UserPicture ruta
                .TextureTile = msoFalse
            End With
    End Select
Next
End Sub

Prueba y me comentas, si no funciona revisamos otras opciones

Saludos. Dam
Si es lo que necesitas.

Excelente resultado!
Muchas gracias he quedado muy satisfecho, tanto con la respuesta como con la foma en como explicas y tomas el problema. MUY AMABLE, MUY PACIENTE , MUY SENCILLO Y POR SU PUESTO MUY CLARO.

Muchas gracias!!!

Ahora tengo una consulta más y si no la respondes no te preocupes ... ¿Dónde puedo ir o con quien me debo acercar para aprender Excel-Excel? porque yo he hecho varias plantillas de manera autodidacta, pero me gustaría aprender más.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas