Recorrer objetos de tipo image dentro de una hoja de excel con un for

Dante como estas espero que muy bien, se que tu eres un pro para excel y vba y tengo un dilema para resolver algo tengo una hoja de excel con varios image los cuales lleno con imágenes de acuerdo a una base de datos que tengo en otra hoja, el problema que tengo es que debo dejar unos image en blanco cuando y continuar más adelante actualmente lo hago de la siguiente forma :

  For Each ctrl In Worksheets("VISUALIZADOR").OLEObjects
    If TypeOf ctrl.Object Is Image Then
      Set img = ctrl.Object
      ruta = Worksheets("SEGMENTACION").Range("L" & a)   'Cargamos la ruta de donde se toma la imagen
      img.Picture = LoadPicture(ruta)  'Se carga la imagen al image
      img.PictureSizeMode = 3  'Ajusta la imagen al image
      ruta = Empty
      a = a + 1   'Incrementamos el numero de celda hacia abajo
  End If
  Next

el problema que tengo es que no consigo saber en que image va el ciclo y como ordenarle que continue en cierto image, espero que me puedas ayudar enserio llevo mucho investigando este dilema y nada que puedo. Feliz dia

1 respuesta

Respuesta
1

Le hice unos ajustes para ver si es lo que necesitas.

Lo que hace es recorrer cada imagen de la hoja "VISUALIZADOR", toma el nombre de la imagen y lo busca en la columna "Z", si el nombre no se encuentra en la columna "Z", significa que la imagen está vacía, entonces la llena con la ruta (Worksheets("SEGMENTACION"). Range("L" & a) ); como la imagen fue llenada con una imagen, entonces graba en la columna "Z" el nombre, para que en la siguiente ejecución, ese image no sea modificado.

Prueba y me comentas

    col = "Z"
    Set h1 = Worksheets("VISUALIZADOR")
    For Each ctrl In h1.OLEObjects
        If TypeOf ctrl.Object Is Image Then
            Set img = ctrl.Object
            nombre = ctrl.Name
            Set b = h1.Columns(col).Find(nombre, lookat:=xlWhole)
            If b Is Nothing Then
                ruta = Worksheets("SEGMENTACION").Range("L" & a)   'Cargamos la ruta de donde se toma la imagen
                img.Picture = LoadPicture(ruta)  'Se carga la imagen al image
                img.PictureSizeMode = 3  'Ajusta la imagen al image
                ruta = Empty
                a = a + 1   'Incrementamos el numero de celda hacia abajo
                u = h1.Range(col & Rows.Count).End(xlUp).Row + 1
                h1.Cells(u, col).Value = nombre
            End If
        End If
    Next

De esa forma podrás saber si un image ya tiene imagen. Igual y te sirve de idea para terminar lo que necesitas.


'.[Sal u dos. Dante Amor. No olvides valorar la respuesta. 
'.[Avísame cualquier duda

Hola Dante te envie un correo a jov1***@yahoo.com con mas detalles

Entonces, explica con más detalle lo que necesitas.

No entiendo, tenías un for each y ahora pones un for.

Mejor explica sin utilizar código, no te preocupes, si es con un for each o con un for o el ciclo que sea, de eso me encargo yo.

Solamente dime qué tienes en cada hoja y qué quieres hacer.

Explica con tus palabras qué debería suceder en la primera ejecución, qué debería suceder en la segunda y siguientes ejecuciones.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas