Ir para conteúdo
Fórum Script Brasil
  • 0

VBA Excel - Do While Loop


Ryxard

Pergunta

Olá!

Este procedimento testa "NomeCliente", "Sobrenome" e "NomeObra". Vamos dizer que eu tenho um cadastro com 10(dez) clientes e que 2(dois) deles tem o NomeCliente = Pedro com Sobrenomes/diferentes e NomeObras/diferentes. Quero excluir um Pedro, pois foi uma entrada equivocada. Faço a pesquisa através do Nome, encontro os 2(dois) Pedros que são listados em uma ListBox, seleciono na ListBox o Pedro que quero excluir e então ele é mostrado no formulário para edição ou exclusão - (na planilha do excel o pedro que escolhi fica na linha mais abaixo do que o outro Pedro, isto é, o teste tem que passar pelo primeiro Pedro para excluir o segundo Pedro). Pressiono Excluir e então começa a busca. Neste ponto estou com problema: "Do While Loop" testa as condicionais, mas na primera ocorrencia de Pedro ele já sai do Loop e então nada é excluido. Como contornar este problema?

Vejam o código

Private Sub btnExcluir_Click()

Dim LinhaExcluir As Integer

Dim resposta As Variant

contador = 0

Range("A1").Select

Do While ActiveCell.Text <> tbxNomeCliente.Text And ActiveCell.Offset(0, 1).Text <> tbxSobrenome.Text And ActiveCell.Offset(0, 2).Text <> tbxNomeObra.Text And contador < 100

ActiveCell.Offset(1, 0).Select

contador = contador + 1

Loop

'Aqui, a condicional de "Do While Loop" foi encontrada e então certifica a exclusão.

If ActiveCell.Text = tbxNomeCliente.Text And ActiveCell.Offset(0, 1).Text = tbxSobrenome.Text And ActiveCell.Offset(0, 2).Text = tbxNomeObra.Text Then

resposta = MsgBox("Tem certeza que deseja excluir o registro?", vbYesNo, "Atenção!!")

If resposta = vbYes Then

LinhaExcluir = ActiveCell.Row

Rows(LinhaExcluir).Select

Selection.Delete Shift:=xlUp

End If

End If

End Sub

Ryxard

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0
Acho que parênteses resolve

Do While (ActiveCell.Text <> tbxNomeCliente.Text And ActiveCell.Offset(0, 1).Text <> tbxSobrenome.Text And ActiveCell.Offset(0, 2).Text <> tbxNomeObra.Text And contador < 100)

Também tentei com parênteses e não resolveu então, usei FOR NEXT

Da forma como está o código abaixo, me atende. Questão resolvida.

Private Sub btnExcluir_Click()

Dim UltimaLinha As Long

Dim LinhaExcluir As Integer

Dim Resposta As Variant

contador = 0

Range("A1").Select

UltimaLinha = Range("A65536").End(xlUp).Row 'Acha a última linha preenchida

For contador = 1 To UltimaLinha 'Abre a estrutura "For" executando um "loop" até a última linha preenchida

If ActiveCell.Text = tbxNomeCliente.Text And ActiveCell.Offset(0, 1).Text = tbxSobrenome.Text And ActiveCell.Offset(0, 2).Text = tbxNomeObra.Text And ActiveCell.Offset(0, 3).Text = tbxServico.Text And ActiveCell.Offset(0, 4).Text = tbxDataContrato.Text Then

Resposta = MsgBox("Tem certeza que deseja excluir o registro?", vbYesNo, "Atenção!!")

If Resposta = vbYes Then

LinhaExcluir = ActiveCell.Row

Rows(LinhaExcluir).Select

Selection.Delete Shift:=xlUp

'Limpando os campos do formulário

tbxNomeCliente.Text = ""

tbxSobrenome.Text = ""

tbxNomeObra.Text = ""

tbxServico.Text = ""

tbxDataContrato.Text = ""

tbxValContrato.Text = ""

tbxValEntrada.Text = ""

cbxNumParcelas.Text = ""

tbxProcurarPor.Text = ""

Exit Sub 'Sai do procedimento

End If

End If

ActiveCell.Offset(1, 0).Select 'Dá um Offset na linha para baixo

Next

End Sub

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...