Visual Basic - VBA excel macro recorrer Hoja (se sale del bucle antes de terminar)

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil

VBA excel macro recorrer Hoja (se sale del bucle antes de terminar)

Publicado por mario (7 intervenciones) el 27/10/2021 17:44:53
Hola,

Necesito haceros una consulta. He preparado un ejemplo muy tonto, pero a ver si me ayudáis a ver qué se me está escapando.

Tengo dos Hojas (Hoja1 y Hoja2).

Necesito llevarme UNO a UNO los registros de Hoja1 a Hoja2. Es decir, me llevo un registro de Hoja1 a Hoja2, una vez ahí hago un cálculo en columna C (para el ejemplo he puesto solo un comentario) y una vez hecho esto, irme a la Hoja1 a por el siguiente registro. No se trata de traerlos de golpe y luego rellenar en Hoja2 la columna C. Se trata de pegar uno, rellenar columna C, ir a por el siguiente, rellenar columna C de esa línea, etc. y así hasta que no queden datos en Hoja1.

Pues me estoy volviendo loco. Se sale del bucle antes de terminar de traerme los registros de Hoja1. Lo he explicado todo lo posible en el código.

¿Alguna sugerencia?

Gracias.
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: 1.259
Plata
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

VBA excel macro recorrer Hoja (se sale del bucle antes de terminar)

Publicado por Antoni Masana (558 intervenciones) el 28/10/2021 15:47:03
Copias el primer registro o más bien mueves el primer registro, y cuando entras en el FOR miras cuantos filas con datos tiene la hoja2 y tiene 1 y copia el segundo registro y termina.
Tienes que mirar las filas de la hoja1

MAL
1
2
With Worksheets("Hoja2")
    For i = 2 To .UsedRange.Rows(.UsedRange.Rows.Count).Row

BIEN
1
2
With Worksheets("Hoja1")
    For i = 2 To .UsedRange.Rows(.UsedRange.Rows.Count).Row

La macro corregida

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
28
Sub recorre_hoja2()
 
    'comenzamos con el primer registro de Hoja1 a Hoja2
 
    Sheets("Hoja1").Range("A2:B2").EntireRow.Cut Destination:=Sheets("Hoja2").Range("A" & Sheets("Hoja2").Range("A" & Rows.Count).End(xlUp).Row + 1)
 
    'lo borramos de hoja1 para dejar el siguiente en la primera posición
 
    Sheets("Hoja1").Range("A2").EntireRow.Delete
    Sheets("Hoja2").Range("C2") = "azul" 'rellenamos dato en comentario de Hoja2
 
    'Ahora continuamos con los siguientes UNO a UNO, rellenamos comentario y vamos a por el siguiente
 
    Sheets("Hoja2").Activate
    With Worksheets("Hoja1")
        For i = 2 To .UsedRange.Rows(.UsedRange.Rows.Count).Row
            If Not IsEmpty("Hoja1") Then
                Sheets("Hoja1").Range("A2:B2").EntireRow.Cut Destination:=Sheets("Hoja2").Range("A" & Sheets("Hoja2").Range("A" & Rows.Count).End(xlUp).Row + 1)
                Sheets("Hoja1").Range("A2").EntireRow.Delete
                'ahora rellenamos columna C de Hoja2 siempre tiene que hacerse nada más pegar el registro
                Sheets("Hoja2").Cells(i + 1, "C").Value = "rojo"
            End If
        Next
    End With
    If Not IsEmpty(Sheets("Hoja1").Range("A2")) Then
        MsgBox "se ha salido del bucle sin terminar de rellenar Hoja2"
    End If
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

VBA excel macro recorrer Hoja (se sale del bucle antes de terminar)

Publicado por mario (7 intervenciones) el 28/10/2021 15:49:51
muchísimas gracias!!!!
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