EXCEL Worksheet_Change funcione más de 1 vez...

Buen día!
Tengo esta macro para insertar en celdas imágenes desde una carpeta.
Lo malo es que solo se puede 1 foto a la vez y necesito que sean varias las fotos.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Foto As Object, Arriba As Double, Izquierda As Double, Ancho As Double, Alto As Double
Dim ruta As String
Application.ScreenUpdating = False
On Error Resume Next
If Not Target = [a1] Then Exit Sub
Me.Shapes("Foto").Delete
ruta = ThisWorkbook.Path & "\FOTOS_EMPLEADOS\" & [a1] & ".jpg"
Set Foto = Me.Pictures.Insert(ruta)
With Range("B1:D5")
Arriba = .Top
Izquierda = .Left
Ancho = .Offset(0, .Columns.Count).Left - .Left
Alto = .Offset(.Rows.Count, 0).Top - .Top
End With
With Foto
.Name = "Foto"
.Top = Arriba
.Left = Izquierda
.Width = Ancho
.Height = Alto
End With
Set Foto = Nothing
Application.ScreenUpdating = True
End Sub
Osea que ademas del valor de a1 también tengo diferentes valores en a2, a3, a4, etc. Y cada uno llamaría a diferente imagen.

1 respuesta

Respuesta
1
Para darte una ayuda más precisa, necesito saber
1. En qué momento quieres cargar cada imagen (¿quieres qué se carguen todas de una vez?). En este momento tu código se ejecuta cada vez que modificas el contenido de una celda.
2. En qué lugar quieres que se cargue cada imagen, pues en este momento se está cargando en el rango b1;d5.
Esto lo uso para imprimir tarjetas de identificación diariamente cambian las imágenes por lo que pretendo poner la imagen en el diseño de cada tarjeta de identificación.
Ej:
Desde A:1 hasta A:60 tendrá un valor numérico diferente yo le pegaría en ese rango los números de imagen que quiero insertar y que se carguen al yo: copiar>pegado especial>valores y caerán los números desde A:1 hasta A:60 aveces menos aveces más celdas.
Cabe mencionar que en donde se insertaran las imágenes son tarjetas de identificación con datos personales y estas tarjetas están distribuidas a lo ancho de una hoja de excel.
Saludos.
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Foto As Object, Arriba As Double, Izquierda As Double, Ancho As Double, Alto As Double
    Dim ruta As String
    Dim i As Integer
    Dim pFila As Integer 'Primera fila
  

    pFila = Target.Row
   
    Application.ScreenUpdating = False
    On Error Resume Next
    'If Not Target = [a1] Then Exit Sub
    For i = pFila To pFila + Target.Rows.Count
        Cells(i, 1).Activate
        'Me.Shapes("Foto").Delete
        ruta = ThisWorkbook.Path & "\FOTOS_EMPLEADOS\" & ActiveCell.value & ".jpg"
        Set Foto = Me.Pictures.Insert(ruta)
        With Range(Cells(ActiveCell.Row, ActiveCell.Column + 1), _
                   Cells(ActiveCell.Row + 5, ActiveCell.Column + 6)
)
        Arriba = .Top
        Izquierda = .Left
        Ancho = .Offset(0, .Columns.Count).Left - .Left
        Alto = .Offset(.Rows.Count, 0).Top - .Top
        End With
        With Foto
        .Name = "Foto" + ActiveCell.Name
        .Top = Arriba
        .Left = Izquierda
        .Width = Ancho
        .Height = Alto
        End With
        Set Foto = Nothing
        Application.ScreenUpdating = True
    Next
End Sub
No creo haber entendido muy bien tu idea, pero aquí te envío una modificación de tu macro que permite insertar una cantidad n de imágenes.
Te preguntaba por el lugar en que querías poner las imágenes, porque en el código que te envío, las imágenes simplemente se están solapando.
Cada imagen se dibuja en un rango de 5x5 celdas, partiendo desde la misma fila en que fue insertado el valor y su columna vecina.
No quise intervenir mayormente tu código, así que modifiqué sólo lo que consideré necesario...
Sea como sea, creo que esto podrá darte una idea.
En el siguiente link subí un ejemplo de lo que quiero hacer:
http://mx.geocities.com/alexbarron_79/CREDENCIALES/
De antemano agradezco mucho tu apoyo
Te hice la pega... ja ja...
Ya, aquí te envío el resultado...
Saludos...
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Foto As Object, Arriba As Double, Izquierda As Double, Ancho As Double, Alto As Double
Dim ruta As String
Dim col As Integer
Dim i As Integer
Application.ScreenUpdating = False
On Error Resume Next
'If Not Target = [d2] Then Exit Sub
For i = Target.Row To Target.Row + Target.Rows.Count - 1
    col = i * 3
    Me.Shapes("Foto_" + CStr(i)).Delete
    ruta = ThisWorkbook.Path & "\FOTOS\" & Cells(2, col + 1) & ".jpg"
    Set Foto = Me.Pictures.Insert(ruta)
    With Range(Cells(4, col), Cells(13, col))
    Arriba = .Top
    Izquierda = .Left
    Ancho = .Offset(0, .Columns.Count).Left - .Left
    Alto = .Offset(.Rows.Count, 0).Top - .Top
    End With
    With Foto
    .Name = "Foto_" + CStr(i)
    .Top = Arriba
    .Left = Izquierda
    .Width = Ancho
    .Height = Alto
    End With
    Set Foto = Nothing
    Application.ScreenUpdating = True
Next
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas