CORREÇÃO ERRO BOTÃO...
 
Notifications
Clear all

CORREÇÃO ERRO BOTÃO ALTERAR

4 Posts
2 Usuários
0 Reactions
1,144 Visualizações
(@sandrolima)
Posts: 0
Estimable Member
Topic starter
 

Boa tarde, pessoal

Tenho o código que me retorna todas as informações das textbox (preenche as textbox) através do botão pesquisar... preciso agora de ajuda para ajustar o seguinte código do botão alterar que permite fazer alteração dos campos da linha da tabela de cadastro em que foi encontrada o valor procurado.

Segue o código:

Private Sub cmb_Alterar_Click()

    Application.ScreenUpdating = False
    
    Dim Tabela As ListObject
    Dim Nome As String
            
    Set Tabela = wsh_Cadastro.ListObjects("TB_Cadastro")
    Nome = Frm_Cadastro.txt_Nome.Value
    
    Dim Linha As Long
        With Tabela.DataBodyRange
            Linha = .Rows.Count
        End With
    
    Do Until CStr(Tabela.ListRows(Linha).range(Linha, 4)) = Nome
        Linha = Linha + 1
    Loop
    
        Me.txt_Cadastro.Value = Tabela.range(Linha, 1).Value
        Me.txt_Data = Tabela.range(Linha, 2).Value
        Me.txt_ID = Tabela.range(Linha, 3).Value
        Me.txt_Nome = Tabela.range(Linha, 4).Value
        Me.cbb_Sexo = Tabela.range(Linha, 5).Value
        Me.txt_DataNasc = Tabela.range(Linha, 6).Value
        Me.cbb_EstadoCivil = Tabela.range(Linha, 8).Value
        Me.txt_CPF = Tabela.range(Linha, 9).Value
        
    Set Tabela = Nothing
    
    LimparCampos
    
    ActiveWorkbook.Save
    
    MsgBox "Alteração realizada com sucesso!", vbExclamation, "Cadastro"
   
    ' Msgbox solicitando a confirmação da alteração
               
End Sub

Por enquanto o problema detectado foi aqui:

Do Until CStr(Tabela.ListRows(Linha).range(Linha, 4)) = Nome

Podem me ajudar na correção/finalização do código?

Ou se souberem de uma rotina melhor.... Não sei se a melhor opção dessa localização de linha seria o CPF já que o cliente pode ter o nome igual ao de outro (raro mas pode acontecer)... porém tem cadastros que não tem CPF (no caso de uma criança por exemplo).

Muito obrigado.

 
Postado : 12/10/2018 10:53 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

SandroLima,

Boa tarde!

Não vi sua rotina do botão pesquisar e também não entendi porque quando você carrega o formulário, ele já vem com o registro 3 preenchido...

A melhor forma de fazer busca, realmente, não é pelo nome. Dessa forma, fiz uma rotina buscando pelo número do cadastro já que podem existir cadastros que não possuem CPF.

Veja se é assim.

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 : 12/10/2018 11:30 am
(@sandrolima)
Posts: 0
Estimable Member
Topic starter
 

Boa tarde, Wagner

Obrigado pela intenção de ajudar.

Preciso que o range de busca fique restrito à "TB_Cadastro" uma vez que a posição dela pode mudar na planilha.

Então em vez de uma busca do tipo:

Dim i As Long
    Dim UltimaLinha As Long
    
    Application.ScreenUpdating = False
    
    UltimaLinha = Sheets("CADASTRO").Cells(Cells.Rows.Count, 2).End(xlUp).Row
    If UltimaLinha < 5 Then UltimaLinha = 5
    
    For i = 5 To UltimaLinha

Talvez fosse melhor selecionar a tabela:

Dim TabeladeBusca As ListObject
'    Dim Nome As String
'
'    Set TabeladeBusca = wsh_Cadastro.ListObjects("TB_Cadastro")
'    Nome = txt_Nome.Value

Não vi sua rotina do botão pesquisar

Não tinha enviado a rotina de pesquisar pq a planilha final é bem mais ampla. Basicamente ele abre um formulário de pesquisa onde informo o CPF ou Nome e ele retorna para o formulário de cadastro com todos os textbox preenchidos.

não entendi porque quando você carrega o formulário, ele já vem com o registro 3 preenchido

Mandei ele preenchido com um dos exemplos da tabela para tentar facilitar o teste da alteração... uma vez que feito a pesquisa ele retornaria o formulário como está preenchido no exemplo. Só queria testar a alteração (sem criar novo cadastro).

Com esse código implementado por você verifiquei que não é possível alterar o próprio campo do nome (ele passa a informar cadastro não localizado)... o que pode ser necessário caso haja um sobrenome trocado ou erro de digitação no cadastro.

OBS

Dentro do código que enviei acho que o melhor seria complementar para achar o número da linha onde o Nome foi encontrado
Com isso eu poderia chegar ao resultado pretendido da seguinte maneira:

Me.txt_Cadastro.Value = Tabela.range(Linha, 1).Value
'        Me.txt_Data = Tabela.range(Linha, 2).Value
'        Me.txt_ID = Tabela.range(Linha, 3).Value
'        Me.txt_Nome = Tabela.range(Linha, 4).Value
'        Me.cbb_Sexo = Tabela.range(Linha, 5).Value
'        Me.txt_DataNasc = Tabela.range(Linha, 6).Value
'        Me.cbb_EstadoCivil = Tabela.range(Linha, 8).Value
'        Me.txt_CPF = Tabela.range(Linha, 9).Value

Preciso que o código identifique o número da linha onde o nome foi encontrado.

 
Postado : 12/10/2018 2:29 pm
(@sandrolima)
Posts: 0
Estimable Member
Topic starter
 

Boa tarde, pessoal

Cheguei nessa linha de raciocínio para o botão alterar de uma tabela de cadastro:

Private Sub cmb_Alterar_Click()
    
    Application.ScreenUpdating = False
       
    Dim Tabela As ListObject
    Dim NCad As Long
    
    Set Tabela = wshCadastro.ListObjects("TB_Pacientes")
    NCad = frm_Cadastro.txt_Cadastro.Value
    
    Tabela.ListRows(1).Range(1, 1).Select
    
    Do While ActiveCell.Value <> "" 'Percorre todas as células da coluna 1 da tabela "TB_Cadastro"
        If ActiveCell.Value = NCad Then
            Tabela.ListRows(ActiveCell).Range(0, 1) = Me.txt_Data.Value
            Tabela.ListRows(ActiveCell).Range(0, 2) = Me.cbb_Profissao.Value
                       MsgBox "Cadastro alterado com sucesso!"
            Exit Do
        End If
        ActiveCell.Offset(1, 0).Select
    Loop
           
    Set Tabela = Nothing
    
    wshCadastro.Select
                  
    Application.ScreenUpdating = True
    
End Sub

Essa parte é para ilustrar o que preciso que é localizar a linha onde se encontra o valor procurado.

Tabela.ListRows(ActiveCell).Range(0, 1) = Me.txt_Data.Value

Seria a linha referente ao ActiveCell. Como faço para achar o número da linha. O valor procurado o código localiza com o loop mas como definir a linha para substituir a expressão "ActiveCell" da linha de comando acima?

Podem me ajudar?

 
Postado : 13/10/2018 12:13 pm