¿Repetir macro en todas las hojas del libro?

Quisiera saber si me pudieran ayudar, quisiera ejecutar esta macro en todas las hojas, no solamente en la hoja activa, pero no consigo hacerla funcionar, en todas las hojas del libro tengo un controlador de imagen, llamado Image1, y el nombre del archivo lo define la celda [xCODIGO] (M3), que varia en cada hoja, ¿alguna solución?

ActiveSheet.Image1.Picture = LoadPicture(ActiveWorkbook.Path & "\imágenes\" & "\Fotos\" & [xCODIGO].Text & ".jpg")

Nota: si ejecuto la macro en una sola hoja, si funciona, sólo en la hoja activa donde la ejecute.

1 respuesta

Respuesta
2

. 30/09/16

Buenas, Gabriel

Me parece que está faltando información para completar el procedimiento.

Pero vamos aproximando una solución.

La siguiente macro aplica a todas las hojas de tu libro:

Sub PoneIMG()
Directorio = ActiveWorkbook.Path & "\imágenes\" & "\Fotos\"
Imagen = [xCODIGO].Range("M3").Text
For Each Hoja In Sheets
    Hoja.Image1.Picture = LoadPicture(Directorio & Imagen & ".jpg")
Next
End Sub

Pruébalas y dime si funciona OK o dónde falla.

Abrazo
Fernando

(Buenos Aires, Argentina)

.

Gracias por responder, me marca error en la siguiente linea -> Hoja.Image1.Picture = LoadPicture(Directorio & Imagen & ".jpg") <- 

te platico un poco más de la Macro, tengo un formulario que incluye un botón de opción, al seleccionar dicho botón, se ejecuta la macro, que inserta la imagen de la ruta definida en la hoja activa, dentro del control de imagen llamado Image1, la macro funciona perfectamente cuando ejecuto la macro desde la hoja1 donde tengo un controlador llamado Image1, sin embargo, en la hoja2 también tengo un controlador de imagen llamado Image1, y quisiera que al ejecutar la macro se ejecutara en todas las hojas activas del libro, la ruta seria la misma, sin embargo la imagen cambiaria, ya que en la celda M3, tengo el nombre de archivo y en cada hoja hay un nombre de archivo diferente.

a M3 lo llame [xCODIGO]

Adjunto el código, para tratar de explicarme mejor.

Muchas gracias

Private Sub OptionButton1_Click()
If OptionButton1.Value = True Then
ActiveSheet.Image1.Picture = LoadPicture(ActiveWorkbook.Path & "\imágenes\" & "\Croquis\" & [xCODIGO].Text & ".jpg")
End If
End Sub

.

Ok, si cada hoja tiene el control de imagen Image1 e indica el nombre de la imagen en la celda M3, prueba con esta variante :

Private Sub OptionButton1_Click()
If OptionButton1.Value = True Then
Directorio = ActiveWorkbook.Path & "\imágenes\" & "\Fotos\"
For Each Hoja In Sheets
    Imagen = Hoja.Range("M3").Text
    Hoja.Image1.Picture = LoadPicture(Directorio & Imagen & ".jpg")
Next
End If
End Sub

Espero que te funcione.

Muy buen fin de semana

Fernando

.

Gracias por responder Fernando, no me funciono, me sigue marcando el mismo error, si cambio:

Imagen=Hoja.Range("M3").Text por Imagen=Range("M3").Text y Hoja.Image1.Picture=LoadPicture(Directorio & Imagen & ".jpg") por ActiveSheet.Image1.Picture=LoadPicture(Directorio & Imagen & ".jpg")

Me funciona pero solo cambia la imagen en una hoja, desde donde ejecuto la macro.

Gracias y buen fin de semana.

.

Es curioso.

Prueba esta otra variante:

Private Sub OptionButton1_Click()
If OptionButton1.Value = True Then
Directorio = ActiveWorkbook.Path & "\imágenes\" & "\Fotos\"
Application.ScreenUpdating = False
For Each hoja In Sheets
    hoja.Select
    Imagen = ActiveSheet.Range("M3").Text
    ActiveSheet.Image1.Picture = LoadPicture(Directorio & Imagen & ".jpg")
Next
End If
End Sub

Esta recorre hoja por hoja para hacerlo. La otra intentaba hacelo remotamente.

Éxito con esto.

Me funciono perfecto, muchas gracias :D pero creo olvide mencionar algo al inicio, existen 4 hojas que no contienen la información en la celda M3, se pueden excluir? se llaman "Generador", "Auxiliar", "Boleta" y "FGen".

¿si se podrán excluir?, incluso para hojas donde el nombre de archivo no se encuentra, ¿se podrá mandar un msg box? te lo agradezco mucho.

Gabriel

.

Sí, claro.

Esta excluye las hojas y avisa si falta dato (y dónde)

Private Sub OptionButton1_Click()
If OptionButton1.Value = True Then
CeldaDato = "M3"
Directorio = ActiveWorkbook.Path & "\imágenes\" & "\Fotos\"
Application.ScreenUpdating = False
For Each hoja In Sheets
    Select Case hoja.Name
        Case "Generador"
        Case "Auxiliar"
        Case "Boleta"
        Case "FGen"
        Case Else
            hoja.Select
            Imagen = ActiveSheet.Range(CeldaDato).Text
            If Len(Imagen) Then
                ActiveSheet.Image1.Picture = LoadPicture(Directorio & Imagen & ".jpg")
            Else
                MsgBox "Falta nombre de archivo en la hoja: " & Chr(10) & hoja.Name & Chr(10) & "Rutina se detiene aquí." & Chr(10) & "Agregar nombre y ejecutar nuevamente.", vbCritical, "FALTA DATO!!!"
                Range(CeldaDato).Select
                Exit Sub
            End If
    End Select
Next
End If
End Sub

Ahora espero que sí.

Abrazo

Fer

.

Funciona perfecto, ya por ultimo, quisiera colocar esta instrucción Image1.PictureSizeMode = fmPictureSizeModeStretch, para que la imagen se acomode de acuerdo a las dimensiones del control de imagen, ¿donde podría colocarla? disculpa tantas preguntas, te lo agradezco.

Gracias

.

Buenas,

Prueba a continuación de:

ActiveSheet.Image1.Picture = LoadPicture(Directorio & Imagen & ".jpg")
ActiveSheet.Image1.PictureSizeMode = fmPictureSizeModeStretch

Debería andar...

Que tengas un muy buen fin de semana.

Saludos
Fer

.

Muchas gracias, funciona a la perfección, que tengas un excelente fin de semana.

Un saludo desde México.

.

Igualmente para ti.

Un placer ayudar!

Abrazo!

Fer

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas