Notifications
Clear all

Apagar linhas baseado em critério

7 Posts
2 Usuários
0 Reactions
1,459 Visualizações
(@mairon)
Posts: 40
Trusted Member
Topic starter
 

Olá pessoal, estava finalizando um projetinho aqui para empresa e fazendo alguns testes quando me deparei com a seguinte situação...

Tem o código do treinamento em uma textbox em um form, esse código fica registrado na guia treinamento e na guia problemas ... quando eu clico no botão excluir a macro deve localizar o código do treinamento que está no textbox na guia treinamento e apagar a linha, depois ir na guia problemas achar o mesmo código e apagar todos os problemas que estiveram para aquele treinamento cujo código está no textbox.... o código abaixo até faz isso corretamente, o problema é quando a alguma das guias estão somente com o cabeçalho das colunas preenchidos (linha 1), ai ele da erro ... segue abaixo código utilizado e marquei onde ocorre o erro. Se alguém puder me ajudar ficarei muuuito grato.

Sheets("Treinamento").Activate

Range("A:A").Find(códtreinamento_txt.Value).Select

Selection.EntireRow.Delete

'--- exclui os problemas relacionados

Sheets("problemas").Activate

'-- o código a ser localizado está na coluna B

finalrowproblemas = Cells(Rows.Count, 2).End(xlUp).row

For i = finalrowproblemas To 2 Step -1 '========= o código da pau aqui

If Val(Cells(i, 2)) = Val(códtreinamento_txt) Then
Cells(i, 1).EntireRow.Delete
End If

Next

 
Postado : 30/01/2014 9:00 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

experimente "testar" a variavel finalproblemas.

finalrowproblemas = Cells(Rows.Count, 2).End(xlUp).row
if finalrowproblemas<2 then  msgbox "Não há registro para ser Excluido"
 
Postado : 30/01/2014 9:05 am
(@mairon)
Posts: 40
Trusted Member
Topic starter
 

Reinaldo,

Obrigado pela atenção.

Fiz o teste e a msgbox "Não há registro para ser Excluido" surgiu na tela, como devo proceder?

 
Postado : 30/01/2014 9:15 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Não sei sua rotina como um todo, mas creio que nessa situação deva parar a execução.
Se for assim altere para:

finalrowproblemas = Cells(Rows.Count, 2).End(xlUp).row
if finalrowproblemas<2 then  
msgbox "Não há registro para ser Excluido"
exit sub
end if
 
Postado : 30/01/2014 12:03 pm
(@mairon)
Posts: 40
Trusted Member
Topic starter
 

Funciono em partes, obrigado!

Só que esqueci de comentar que tem mais alguns códigos abaixo para limpar os textbox, creio que como tem o exit sub no for o código para antes de chegar no final. O código completo é assim.

' -- exclui o treinamento

Sheets("Treinamento").Activate

Range("A:A").Find(códtreinamento_txt.Value).Select

Selection.EntireRow.Delete

'--- exclui os problemas relacionados

Sheets("problemas").Activate

finalrowproblemas = Cells(Rows.Count, 2).End(xlUp).Row

If finalrowproblemas < 2 Then
Exit Sub
End If

For i = finalrowproblemas To 2 Step -1 '<==AQUI ERA ONDE OCORRIA O PROBLEMA, JÁ MODIFIQUEI CONFORME SUAS DICAS

If Val(Cells(i, 2)) = Val(códtreinamento_txt) Then
Cells(i, 1).EntireRow.Delete
End If

Next

'-- limpa os campos

códtreinamento_txt = Empty
treinador_txt = Empty
treinamentocliente_cbo = Empty
treinamentocão_cbo = Empty
treinamentoraça_txt = Empty
treinamentoidade_txt = Empty
pessoasdacasa_txt = Empty
treinamentostatus_cbo = Empty

Sheets("Início").Activate

MsgBox "Treinamento excluído com sucesso"
End If

End Sub

 
Postado : 30/01/2014 1:56 pm
(@mairon)
Posts: 40
Trusted Member
Topic starter
 

Consegui resolver, ficou assim

Sheets("problemas").Activate

finalrowproblemas = Cells(Rows.Count, 2).End(xlUp).Row

For i = finalrowproblemas To 2 Step -1
If finalrowproblemas < 2 Then
Exit For

Else

If Val(Cells(i, 2)) = Val(códtreinamento_txt) Then
Cells(i, 1).EntireRow.Delete
End If

End If

Next

 
Postado : 31/01/2014 12:53 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Caso seja necessário reabrir o tópico, o autor poderá enviar uma MP para um dos moderadores solicitando o desbloqueio.

 
Postado : 31/01/2014 6:19 pm