Notifications
Clear all

Problemas com CmbBox

6 Posts
3 Usuários
0 Reactions
1,385 Visualizações
(@clone83)
Posts: 0
New Member
Topic starter
 

Bom dia.

Recentemente vendo e praticando umas videos aulas me deparei com um pequeno problema.

Numa determinada aula que ensinava a alterar registros salvos, travei num problema aparentemente simples, do qual nao consigo descobrir o motivo.
Na planilha tenho alguns botoes, entre eles os de "Buscar" e "Gravar". Quando seleciono um nome no Combo Box e clico no botao Buscar, ele deve buscar valores da planilha 2 e demonstralos na planilha1, ate ai esta funcionando bem. A questao e que o nome nao deveria sumir do Combo Box, pois com base nele e usando as Subs Checar Valores e Gravar, a macro deve atualizar os dados (Caso tal nome ja exista no banco de dados) em vez de duplicar os registros salvos. Dentro da SUB Gravar existe chamada para outras Subs (Checar registros e Atualizar Combos), ambos criados em modulos separados. Abaixo segue o codigo das quatro subs (Gravar, Buscar, Checar Valores e Atualizar Combos).

A grande questao é, escolho um nome no Combo Box, clico em buscar, altero algum dados e clico em Gravar, o nome some, o que faz com que a Sub Checar Registros nao funcione direito e ai ele duplica o registro.
Poderiam me ajudar a encontrar onde esta o erro?

Private Sub BTBUSCAR_Click()
Application.ScreenUpdating = False

Dim w As Worksheet
Dim w2 As Worksheet
Dim nome As String


Set w = Sheets("Planilha1")
Set w2 = Sheets("Planilha2")
nome = Sheets("Planilha1").cmbbuscar.Value

w2.Select
w2.Range("a2").Select


Do While ActiveCell.Value <> ""

    If ActiveCell.Value = nome Then
    
        w.Range("a2").Value = ActiveCell.Value
        w.Range("b2").Value = ActiveCell.Offset(0, 1).Value
        w.Range("c2").Value = ActiveCell.Offset(0, 2).Value
            
        Exit Do
        
    End If

    ActiveCell.Offset(1, 0).Select
        

Loop


atualizacombo
w.Select
w.Range("a2").Select


Application.ScreenUpdating = True




End Sub


Private Sub BTGRAVAR_Click()

Application.ScreenUpdating = False

Dim w As Worksheet
Dim w2 As Worksheet


Set w = Sheets("Planilha1")
Set w2 = Sheets("Planilha2")

w.Select
w.Range("a2:c2").Select
Selection.Copy

w2.Select
w2.Range("a1048576").Select
ActiveCell.End(xlUp).Select
ActiveCell.Offset(1, 0).Select

checar_registros



Application.CutCopyMode = False


atualizacombo

w.Select
w.Range("a2:c2").Clear
w.Range("a2").Select

Application.ScreenUpdating = True

End Sub



Sub atualizacombo()

Application.ScreenUpdating = False

Dim w As Worksheet
Set w = Sheets("Planilha2")

w.Select
w.Range("a2").Select

Sheets("Planilha1").cmbexcluir.Clear
Sheets("Planilha1").cmbbuscar.Clear


Do While ActiveCell.Value <> ""



    Sheets("Planilha1").cmbexcluir.AddItem ActiveCell.Value
    Sheets("Planilha1").cmbbuscar.AddItem ActiveCell.Value
    
    ActiveCell.Offset(1, 0).Select
    
    


Loop

Application.ScreenUpdating = True

End Sub


Sub checar_registros()

Dim w As Worksheet
Dim w2 As Worksheet
Dim nome As String


Set w = Sheets("Planilha1")
Set w2 = Sheets("Planilha2")

nome = Sheets("Planilha1").cmbbuscar.Value


w2.Select
w2.Range("a2").Select

Do While ActiveCell.Value <> ""

    If ActiveCell.Value = nome Then
    
        ActiveCell.Value = w.Range("a2").Value
        ActiveCell.Offset(0, 1).Value = w.Range("b2").Value
        ActiveCell.Offset(0, 2).Value = w.Range("c2").Value
        
        
        
        MsgBox "Dados alterados com sucesso."
        w.Select
        w.Range("a2").Select
               
       
        Exit Sub
        
        
    
    End If
      
    
    
    
    ActiveCell.Offset(1, 0).Select
    

Loop

ActiveSheet.Paste
End Sub
 
Postado : 26/04/2018 7:45 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

clone83,

Bom dia!

Seja muito bem vindo ao fórum.

Para aproveitar ao máximo o fórum e sempre manter o mesmo de forma organizada, sugiro ler os tópico da regras abaixo:
viewtopic.php?f=7&t=16757
viewtopic.php?f=7&t=203
viewtopic.php?f=7&t=7903
viewtopic.php?f=7&t=3841
viewtopic.php?f=7&t=12600
viewtopic.php?f=7&t=3371

Quanto a sua demanda, segue abaixo algumas sugestões:
1 - Sugerimos criar um pequeno arquivo, com poucas linhas, compactar o mesmo com .ZIP e anexar aqui mesmo no fórum. Isso tornará o processo de análise, depuração do código, encontro do erro e possíveis soluções de maneira mais rápida e eficiente. Seu arquivo deve ser pequeno e apenas de exemplo, todavia, deverá conter o mesmo layout do arquivo original (nome do arquivo, nome das abas, linhas e colunas onde começam os dados e o respectivo formulário com seus objetos.
2 - Ao postar código VBA aqui no fórum, solicitamos, por gentileza, utilizar a ferramenta CODE existente logo no início da Caixa de Mensagens (quinto botão da esquerda para a direita).

 
Postado : 26/04/2018 8:02 am
(@klarc28)
Posts: 0
New Member
 

Sem o arquivo, fica difícil responder.
Suspeito que a ComboBox esteja perdendo o valor porque você está selecionando outra célula:

ActiveCell.Offset(1, 0).Select

Tente tirar essa linha e veja se funciona.

Se não funcionar, só com o arquivo mesmo.

 
Postado : 26/04/2018 3:44 pm
(@clone83)
Posts: 0
New Member
Topic starter
 

Boa noite, me desculpe se infrigi alguma regra. Quanto ao arquivo, não entendi direito. O que devo fazer? E quanto ao Code, basta clicar no botão e colar o código logo em seguida?

Me perdoe pelas todas perguntas.

 
Postado : 26/04/2018 5:50 pm
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

Vamos lá...

Você cria um pequeno exemplo no Excel e anexa o mesmo, de forma compactada com .ZIP, aqui mesmo no fórum. Logo abaixo da caixa de mensagens existe uma aba chamada "ADICIONAR UM ANEXO", Clicando nessa aba vai abrir o botão SELECIONAR ARQUIVO para que você escolha, na pasta onde está saldo seu exemplo, o arquivo. Após clicar em OK, o nome do arquivo aparecerá logo abaixo da janela. Você então clica no botão ADICIONAR UM ANEXO e o mesmo será anexado a sua mensagem. Depois é só enviar.

Quanto a ferramenta CODE (quinto botão da esquerda para a direita) logo acima da caixa de mensagens, no ponto da sua mensagem aonde você deseja inserir código VBA, você clica no botão CODE. O Sistema vai inserir a as palavras "code" e "/code" dentro de colchetes. Basta você colocar o cursor no meio dos dois colchetes que estão juntos ][ e teclar enter que a palavra "/code" passará para a linha de baixo. Coloque então o cursor no espaço entre as duas palavras e comece a inserir seu código VBA.


                                                                                                	                                                
 
Postado : 27/04/2018 6:44 am
(@clone83)
Posts: 0
New Member
Topic starter
 

Obrigado a todos que contribuiram doando parte de seu tempo e conhecimento.

Gracas a Deus consegui resolver o problema.

 
Postado : 02/05/2018 6:57 am