Notifications
Clear all

Codigo em Loop Infinito

5 Posts
4 Usuários
0 Reactions
1,381 Visualizações
(@celri_33)
Posts: 0
Estimable Member
Topic starter
 

Pessoal, o código abaixo entra em um loop infinito, não sei como resolver

Range("B5").Select
While ActiveCell <> ""
If Txt_Nome.Text = ActiveCell Then
If MsgBox("Cliente existe na base. Deseja Substituir?", vbYesNo) = vbYes Then
GoTo Continue
End If
End If
ActiveCell.Offset(0, 1).Activate
Wend
Continue:

iRow = ActiveCell.Row

Segue código completo.

Private Sub Btn_Ok_Click()

Dim Nome  As String
Dim Cadastro As String
Dim CPFCNPJ As String
Dim rg As String
Dim Telefone As String
Dim Celular As String
Dim Recado As String
Dim Responsavel As String
Dim Email As String
Dim Endereco As String
Dim Numero As String
Dim Bairro As String
Dim Cidade As String
Dim Uf As String
Dim CEP As String
Dim Banco As String
Dim Usuario As String
Dim Data As String
Dim Celula As Object


For Each Celula In Worksheets("Clientes").Range("A:A")

Range("B5").Select
While ActiveCell <> ""
If Txt_Nome.Text = ActiveCell Then
If MsgBox("Cliente existe na base. Deseja Substituir?", vbYesNo) = vbYes Then
GoTo Continue
End If
End If
ActiveCell.Offset(0, 1).Activate
Wend
Continue:

iRow = ActiveCell.Row

If Celula = "" Then

Celula.Offset(0, 1) = Txt_Nome
Celula.Offset(0, 2) = Txt_Cadastro
Celula.Offset(0, 3) = Txt_cpfcnpj
Celula.Offset(0, 4) = Txt_Rg
Celula.Offset(0, 5) = Txt_Telefone
Celula.Offset(0, 6) = Txt_Celular
Celula.Offset(0, 7) = Txt_Recado
Celula.Offset(0, 8) = Txt_Responsavel
Celula.Offset(0, 9) = Txt_Email
Celula.Offset(0, 10) = Txt_Endereco
Celula.Offset(0, 11) = Txt_Numero
Celula.Offset(0, 12) = Txt_Bairro
Celula.Offset(0, 13) = Txt_Cidade
Celula.Offset(0, 14) = Txt_Uf
Celula.Offset(0, 15) = Txt_Cep
Celula.Offset(0, 16) = Txt_Banco
Celula.Offset(0, 17) = Txt_Usuario
Celula.Offset(0, 18) = Txt_Data

MsgBox "Cadastro Salvo com Sucesso"
lsLimparTextBox Form_Cadastro

Unload Me

Worksheets("Clientes").Select

Exit Sub

End If

Next

End Sub

Alguém poderia me dar uma luz de como resolver?

 
Postado : 23/08/2018 8:41 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Pela sua rotina, pelo menos visualmente, nada que justifique/provoque o loop infinito;
precisa/deve ser analisado no ambiente/projeto de utilização. Assim se puder dispor de seu modelo/exemplo.
Contudo algumas consideraçãoes:
Primeiro:Inicialmente são declaradas muitas variáveis, e a grande maioria não é utilizada.
Pergunta: Para que as variáveis se não serão utilizadas??
Segundo:E iniciado um laço "For Each" na coluna A; que tende a percorrer a coluna A inteira; porem seus dados; aparentemente; iniciam em B5
Pergunta: Qual o objetivo/ideia inicial do Laço "For Each"
Terceiro: Pela disposição de "gravação" dos dados Nome deve ser sempre em linha,na coluna B, e demais dados desse nome na mesma linha nas colunas adjacentes.
Pergunta: Por que a clausula While e "direcionada" para procurar/comparar por coluna --> ActiveCell.Offset(0, 1).Activate
Obs.: A sintaxe para offset e .Offset(Linha, Coluna)
Quarto: A uma variavel ("iRow"); não declarada inicialmente ; e atribuido o valor da linha corrente -->irow = ActiveCell.Row
Pergunta: Qual o objetivo inicial dessa atribuição, se essa variavel não é utiliza na rotina/codigo
Quinto: Em parte vinculada ao Segundo, o método de salvamento/gravação está mantendo; aparentemente; sempre a mesma linha

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 23/08/2018 10:08 am
xlarruda
(@xlarruda)
Posts: 732
Honorable Member
 

Acredito que dê para trocar esse For Each e também o While por For Next apenas.

Faça um For Next verificando se o nome do Textbox ja existe.
E outro procurando a linha vazia para inserir os dados.

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

Att.

André Arruda

 
Postado : 23/08/2018 10:26 am
(@celri_33)
Posts: 0
Estimable Member
Topic starter
 

Obrigado amigos, vou dar uma verificada, enquanto as variáveis, são muitas mesmo.

 
Postado : 23/08/2018 1:12 pm
(@salezzi)
Posts: 10
Active Member
 

Celri_33, acredito que seu código não está com um loop infinito e sim contabilizando o total de linhas que contém no Excel.
No seu "For each" está pegando a coluna inteira, ou seja, todas as linhas da coluna "A", que no total é 1048576 linhas.

"For Each Celula In Worksheets("Clientes").Range("A:A")"

Repare no Range, "Range("A:A")". Coluna inteira.

Aconselho que ao colocar um grupo no "For Each", definir uma limitação de células preenchidas, ou seja, localizar a última linha preenchida e deixar o "For Each" com um grupo limitado.

Uma outra opção que acredito que seja mais simples e fácil, é utilizar o "Do Until", exemplo:

cont = 2
do until Cells(cont,1).value = ""

(reparei que você está buscando se já existe um nome na lista, então cabe aqui usar o "IF". Então você coloca o procedimento que preferir.)

cont = cont + 1
loop

É importante pegar um coluna do qual você tem certeza que será preenchido e não haverá nenhuma célula em branco, só quando acabar a lista.

Espero ter ajudado.

Se a informação foi útil, click no joinha ao lado do botão citar. Sucesso!!!

 
Postado : 26/08/2018 6:43 am