Notifications
Clear all

For Next não roda corretamente

7 Posts
3 Usuários
0 Reactions
1,575 Visualizações
(@romanholi)
Posts: 177
Estimable Member
Topic starter
 

Pessoal, boa tarde!

O Loop que eu fiz abaixo está quase perfeito. O problema é que como insere linha na planilha o código não chega no final das linhas.
E eu não sei resolver. Já tentei colocar UltimaLinha = UltimaLinha + 1, mas o loop continua parando antes.

Como resolvo isso.
A variável UltimaLinha tem que mudar, pois as linhas aumentarão.

    
For M = 2 To UltimaLinha

    
        If Range("B" & M) <> Range("B" & M - 1) Then
        
      
            Rows(M & ":" & M).Select
            Selection.Copy
            Selection.Insert Shift:=xlDown
            
            Range("E" & M) = Range("B" & M)
            Range("F" & M) = Range("B" & M)
            Range("G" & M) = "UN"
            Range("H" & M) = "1"
            Range("I" & M) = "1"
            Range("J" & M) = "1"
            
          
            
         Else
         End If
            
    
   Next
 
Postado : 21/06/2018 11:41 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

romanholi,

Não sei como é seu arquivo e estou trabalhando com suposições. Aqui, não ocorreu nenhum problema e executou normalmente até a última linha (tela anexa).

A execução eu fiz com o código abaixo:

Sub teste()
    UltimaLinha = Sheets("Plan1").Cells(Cells.Rows.Count, 2).End(xlUp).Row
    
    For M = 2 To UltimaLinha
         If Range("B" & M) <> Range("B" & M - 1) Then
             Rows(M & ":" & M).Select
             Selection.Copy
             Selection.Insert Shift:=xlDown
            
             Range("E" & M) = Range("B" & M)
             Range("F" & M) = Range("B" & M)
             Range("G" & M) = "UN"
             Range("H" & M) = "1"
             Range("I" & M) = "1"
             Range("J" & M) = "1"
          End If
    Next
End Sub

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 21/06/2018 11:51 am
(@romanholi)
Posts: 177
Estimable Member
Topic starter
 

Wagner, obrigado pelo retorno.
Veja meu anexo.
O loop só vai até a linha 34, e como são inseridas novas linhas ele não chega até o último código que precisa ser duplicado.

Obrigado

 
Postado : 21/06/2018 12:01 pm
xlarruda
(@xlarruda)
Posts: 732
Honorable Member
 

Aproveitando o código do colega wagner, veja se isso resolve:

Sub teste()
Dim M As Integer
  
    For M = 2 To UsedRange.Rows.Count
         
         If Range("B" & M) <> Range("B" & M - 1) Then
             Rows(M & ":" & M).Select
             Selection.Copy
             Selection.Insert Shift:=xlDown
            
             Range("E" & M) = Range("B" & M)
             Range("F" & M) = Range("B" & M)
             Range("G" & M) = "UN"
             Range("H" & M) = "1"
             Range("I" & M) = "1"
             Range("J" & M) = "1"
          End If
         
    Next
    
    
End Sub

___________________________________________________________________________________________
Se a resposta atendeu sua dúvida, por favor, clique no Gostei e marque o Tópico como [Resolvido].

Att.

André Arruda

 
Postado : 21/06/2018 12:20 pm
(@romanholi)
Posts: 177
Estimable Member
Topic starter
 

Boa Tarde Arruda.

Quase funcionou, ele está duplicando a última linha... não deveria.

Vi que ele faz o loop 182 vezes... como o UsedRange.Rows.Count chegou nesse número? Só tenho 33 linhas, antes de rodar o loop.

 
Postado : 21/06/2018 12:46 pm
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

Entendi...

Bom, não testei mas... no caso de exclusões e inserções de linhas, geralmente se usa a contagem de baixo pra cima para evitar esse tipo de problema. Veja se assim resolve.

Sub teste()

Dim UltimaLinhas As Integer
Dim M            As Integer

    UltimaLinha = ActiveSheet.Cells(Cells.Rows.Count, 2).End(xlUp).Row
    
    For M = UltimaLinha To 2 Step -1
         If Range("B" & M) <> Range("B" & M - 1) Then
             Rows(M & ":" & M).Select
             Selection.Copy
             Selection.Insert Shift:=xlDown
            
             Range("E" & M) = Range("B" & M)
             Range("F" & M) = Range("B" & M)
             Range("G" & M) = "UN"
             Range("H" & M) = "1"
             Range("I" & M) = "1"
             Range("J" & M) = "1"
          End If
    Next
    
    
End Sub

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 21/06/2018 12:50 pm
(@romanholi)
Posts: 177
Estimable Member
Topic starter
 

Exatamente isso meu amigo!
De baixo para cima! Aprendi! Step-1

Muitíssimo Obrigado aos Amigos

 
Postado : 21/06/2018 1:05 pm