Excel - recorrer rango con un bucle for

 
Vista:
sin imagen de perfil

recorrer rango con un bucle for

Publicado por Xabier (4 intervenciones) el 09/07/2021 10:02:14
Al ejecutar esta macro no se por qué no me recorre el rango entero, se queda siempre en el primer valor del rango. Alguien sabe por qué puede pasarme?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Sub crearlista()
Dim Cosa As String
Dim Celda As Range
 
 
 
For Each Celda In Range("B2:I2")
    If Not IsEmpty(Celda.Value) Then
        Cosa = ActiveCell.Offset(-1, 0)
 
        With Worksheets("Hoja1").Range("L2").Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:=Cosa
            .IgnoreBlank = True
            .InCellDropdown = True
            .InputTitle = ""
            .ErrorTitle = ""
            .InputMessage = ""
            .ErrorMessage = ""
            .ShowInput = True
            .ShowError = True
        End With
    End If
Next Celda
 
End Sub
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

recorrer rango con un bucle for

Publicado por Antoni Masana (1846 intervenciones) el 09/07/2021 16:34:19
No se que hace la macro, no se que querías que hiciese, no puedo probar que hace entre otras cosas por que no tengo el libro y difícilmente puedo saber que hace mal y porque lo hace, entre otra cosa no se que debe hacer para hacerlo bien.

Aclarado este punto te comento lo que veo que está mal.

- Esta macro ¿se debe ejecutar en una hoja determinara o se puede ejecutar en cualquier hoja?
- Si tienes más de una hoja al ejecutarse lo hará desde la que este activa sea cual sea y el resultado no será el esperado.
- Lee de un rango de celdas y el resultado SIEMPRE es sobre la misma celda ¿Que esperas que pase?

A falta de más información no puedo ayudarte más.

Saludos.
\\//
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

recorrer rango con un bucle for

Publicado por Xabier (4 intervenciones) el 13/07/2021 08:45:14
Hola, lo primero muchas gracias por la respuesta.
Lo segundo disculpas, porque estoy empezando con las macros y ando un poco perdido todavía, entonces cometo muchos errores.
Lo que quiero que haga mi macro es lo siguiente:
- Recorrer un rango de celdas especificado en una hoja determinada y que me evalúe si esas celdas están vacías o no.
- Segundo, en caso de que no estén vacías, quiero que coja el valor de la celda inmediatamente superior a la que acaba de evaluar, y ese valor lo añada a una lista desplegable situada en otra celda especificada en la misma hoja.
Como te he dicho ando bastante perdido, cualquier ayuda se agradece.
Muchas gracias y un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

recorrer rango con un bucle for

Publicado por Antoni Masana (1846 intervenciones) el 13/07/2021 09:04:43
No puedo probarlo por lo que no se si funciona pero por lo que me explicas el problema que tienes es que cada vez que añades un elemento a la lista previamente la limpias y por consiguiente solo queda el ultimo elemento añadido.

Te pongo el código corregido:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Sub crearlista()
    Dim Cosa As String, Celda As Range
 
    Worksheets("Hoja1").Range("L2").Validation.Delete
 
    For Each Celda In Range("B2:I2")
        If Not IsEmpty(Celda.Value) Then
            Cosa = ActiveCell.Offset(-1, 0)
 
            With Worksheets("Hoja1").Range("L2").Validation
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
                                           Operator:=xlBetween, _
                                           Formula1:=Cosa
                .IgnoreBlank = True
                .InCellDropdown = True
                .InputTitle = ""
                .ErrorTitle = ""
                .InputMessage = ""
                .ErrorMessage = ""
                .ShowInput = True
                .ShowError = True
            End With
        End If
    Next Celda
End Sub

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

recorrer rango con un bucle for

Publicado por Xabier (4 intervenciones) el 13/07/2021 10:47:28
Lo que me gustaría con la macro (adjunto imagen) es que al recorrer el bucle me genere una lista desplegable con los elementos AAA, CCC, DDD, FFF Y HHH.
Al ejecutar el código que me has mandado me ha salido el siguiente error (adjunto imagen).

lista_desplegable

error1
error2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar