¿Por qué cuando uso el botón en Macro, no me respeta el orden de insertado de imágenes?

Dante y Expertos

Buenas

El siguiente código inserta una imagen cada 4 celdas.

A veces cuando lo corro directamente del Modulo, sirve y me las pone en las celdas adecuadas, pero en otras ocasiones no.

Sin embargo cuando utilizo un botón ( ya sea "Form Controls" o "ActiveX Controls") siempre me las pone en el mismo lugar (muy cerca de la primer celda destino "B6" y no respeta el rango de celdas que le doy.

Por favor, ¿podrían ayudarme a saber si es normal? ¿O cómo se puede solucionar?

La versión de Excel que tengo es: Office 365 MSO - 1.0.1257.20612 - 32Bit

Sub InsertaImagen()
Dim sPath As String
Dim img As Object
Dim Li As String
Dim rngCell As Range
Dim i, n As Integer
s1 = "Sheet1"
sPath = Sheets("Main").Range("C11")
n = 6
    For i = 0 To 5
    'n = 3 + (i * 2)
        Set rngCell = Worksheets(s1).Range("B" & n)
        Li = sPath & "\L" & i & ".jpg"
        Set img = Worksheets(s1).Pictures.Insert(Li)
        With img
            .Left = rngCell.Left
            .Top = rngCell.Top
            .Width = rngCell.Width
            .Height = rngCell.Height
            .Placement = 1
            .PrintObject = True
        End With
        n = n + 4
    Next i
End Sub
Respuesta
1

Prueba con la instrucción DoEvents:

Sub InsertaImagen()
  Dim sPath As String, Li As String
  Dim img As Object
  Dim rngCell As Range
  Dim i As Long, n As Long
  Dim s1 As Worksheet
  '
  Set s1 = Sheets("Sheet1")
  sPath = Sheets("Main").Range("C11")
  n = 6
  For i = 0 To 5
    Set rngCell = s1.Range("B" & n)
    Li = sPath & "\L" & i & ".jpg"
    Set img = s1.Pictures.Insert(Li)
    DoEvents
    With img
      .Left = rngCell.Left
      .Top = rngCell.Top
      .Width = rngCell.Width
      .Height = rngCell.Height
      .Placement = 1
      .PrintObject = True
    End With
    DoEvents
    n = n + 4
  Next i
End Sub

Hola Dante

Gracias por tu pronta respuesta.

Ya he usado el "DoEvents" y aun sigo teniendo el mismo problema, corre la Macro, pero no inserta las imágenes en las celdas correspondientes, solo la primera imagen la pone en la celda "B6", las demás las encima cerca del mismo rango "B6" ... solo que observe algo probando la Macro ... los botones los tengo en el Sheet "Main", puse un botón en el Sheet "Print Outs" (que es donde quiero se se inserten), poniendo el botón ahí no me dio problema, me las pone en orden... ¿Hay otra forma de que no tenga que usar "s1.Activate" o "s1.Select" para que identifique el sheet? Porque lo que se me ocurre es poner antes del "For" y después del "Next i":

s1.Select
For i = 0 to 5 ....
---
-----
------
Next i
Sheets("Main").Select

Selecciona la hoja, pero utiliza Application.ScreenUpdating = False

Prueba esto:

Sub InsertaImagen()
  Dim sPath As String, Li As String
  Dim img As Object
  Dim rngCell As Range
  Dim i As Long, n As Long
  Dim s1 As Worksheet
  '
  Application.ScreenUpdating = False
  Set s1 = Sheets("Sheet1")
  s1.Select
  sPath = Sheets("Main").Range("C11")
  n = 6
  For i = 0 To 5
    Set rngCell = s1.Range("B" & n)
    Li = sPath & "\L" & i & ".jpg"
    Set img = s1.Pictures.Insert(Li)
    DoEvents
    With img
      .Left = rngCell.Left
      .Top = rngCell.Top
      .Width = rngCell.Width
      .Height = rngCell.Height
      .Placement = 1
      .PrintObject = True
    End With
    DoEvents
    n = n + 4
  Next i
  Sheets("Main").Select
  Application.ScreenUpdating = False
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas