Vídeo recomendado
https://youtu.be/diWPPPhW-9E

Atualizar célula já Cadastrada após a coluna Z

Fórum para dúvidas sobre os fundamentos da linguagem de programação Visual Basic no contexto do VBA
klaubher
Acabou de chegar
Acabou de chegar
Mensagens: 8
Registrado em: Qua Fev 14, 2018 6:19 pm

Atualizar célula já Cadastrada após a coluna Z

Mensagem por klaubher »

Fiz um banco de dados para cadastrar os pacientes onde trabalho. E criei uma função de atualização dos dados quando necessário. Tudo funciona bem, mas percebi que nos campos que ficam nas colunas após a "Z", coluna de número 27, se não me engano, ele não salva mais. O problema é por que chegou ao final das colunas dentro da função?

ActiveCell.Offset(0, 28).Value = caixa_sus4
ActiveCell.Offset(0, 30).Value = caixa_busca4

ESSAS CAMPOS NÃO ATUALIZAM..

SEGUE A FUNÇÃO USADA:

Public Sub AtualizarCd()
'''''''Primeiramente, verificar se a caixa nome não está vazia
If caixa_prontuario4.Value = Empty Then
MsgBox "Prontuário vazio. Selecione primeiramente um cliente!", vbCritical, "Cadastro Vazio"
caixa_nomepesquisa4.SetFocus 'Voltar para a seleção de cliente\paciente
Exit Sub
End If

''''''Se não estiver vazia, seguir com a atualização
Application.ScreenUpdating = False 'Executar a rotina sem que seja vista a execução
Sheets("BancodeDados").Select 'Seleciona o banco de dados
Range("A2").Select 'Seleciona a célula A1

Do
If ActiveCell.Value = caixa_prontuario4.Text Then 'Se o valor da célula for igual ao valor da caixa prontuário então descarrega os dados
'ATUALIZA OS DADOS
ActiveCell.Offset(0, 0).Value = caixa_prontuario4
ActiveCell.Offset(0, 8).Value = caixa_telefone4
ActiveCell.Offset(0, 21).Value = caixa_endereco4
ActiveCell.Offset(0, 25).Value = caixa_dia4
ActiveCell.Offset(0, 24).Value = caixa_consulta4
ActiveCell.Offset(0, 3).Value = caixa_nome4
ActiveCell.Offset(0, 28).Value = caixa_sus4
ActiveCell.Offset(0, 30).Value = caixa_busca4
MsgBox "Dados atualizados com sucesso!", vbInformation, "ATUALIZADO"
Exit Sub

Else 'Se não for, selecionar uma célula abaixo
ActiveCell.Offset(1, 0).Select
End If

Loop Until ActiveCell.Value = Empty 'Busca a célula até encontrar uma célula vazia.

Application.ScreenUpdating = True
End Sub


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


srobles
Jedi
Jedi
Mensagens: 805
Registrado em: Qua Mai 06, 2015 7:39 pm

Re: Atualizar célula já Cadastrada após a coluna Z

Mensagem por srobles »

klaubher,

Como não disponibilizou um modelo para testes, deixo abaixo a sua rotina modificada.

Código: Selecionar todos

Public Sub AtualizarCd()
    '''''''Primeiramente, verificar se a caixa nome não está vazia
    If caixa_prontuario4.Value = Empty Then
        MsgBox "Prontuário vazio. Selecione primeiramente um cliente!", vbCritical, "Cadastro Vazio"
        caixa_nomepesquisa4.SetFocus 'Voltar para a seleção de cliente\paciente
        Exit Sub
    End If
    
    ''''''Se não estiver vazia, seguir com a atualização
    Application.ScreenUpdating = False 'Executar a rotina sem que seja vista a execução
    
    Dim codProntuario
    Dim linhaRegistro As Long
    With ThisWorkbook.Sheets("BancodeDados")
        
        .Activate
        .Cells(1, 1).Select
        
        With Range("A:ZZ")
            Set codProntuario = .Find(CStr(caixa_prontuario4.Text))
                If Not codProntuario Is Nothing Then
                    linhaRegistro = codProntuario.Row
                    
                    With ThisWorkbook.Sheets("BancodeDados")
                        .Cells(linhaRegistro, 1) = caixa_prontuario4
                        .Cells(linhaRegistro, 3) = caixa_nome4
                        .Cells(linhaRegistro, 8) = caixa_telefone4
                        .Cells(linhaRegistro, 21) = caixa_endereco4
                        .Cells(linhaRegistro, 25) = caixa_dia4
                        .Cells(linhaRegistro, 24) = caixa_consulta4
                        .Cells(linhaRegistro, 28) = caixa_sus4
                        .Cells(linhaRegistro, 30) = caixa_busca4
                        MsgBox "Dados atualizados com sucesso!", vbInformation, "ATUALIZADO"
                        Exit Sub
                    End With
                Else
                    MsgBox "Prontuário não cadastrado / localizado!", vbCritical, "Erro"
                    Exit Sub
                End If
        End With
    End With
    
    Application.ScreenUpdating = True
End Sub


Avatar do usuário
Reinaldo
Jedi
Jedi
Mensagens: 1537
Registrado em: Sex Ago 01, 2014 4:09 pm
Localização: Garça - SP / SCS - SP

Re: Atualizar célula já Cadastrada após a coluna Z

Mensagem por Reinaldo »

Para constar, da maneira que esta a rotina informada. Como a célula/coluna inicial (activeCell) continua fixa em A2 ("Range("A2").Select"); todo deslocamento (Offset) tem como base essa referencia.
ocorrem nas colunas:

Código: Selecionar todos

'ATUALIZA OS DADOS
ActiveCell.Offset(0, 0).Value = caixa_prontuario4     'Atualiza Coluna A
ActiveCell.Offset(0, 8).Value = caixa_telefone4        'Atualiza Coluna I
ActiveCell.Offset(0, 21).Value = caixa_endereco4     'Atualiza Coluna V
ActiveCell.Offset(0, 25).Value = caixa_dia4              'Atualiza Coluna "Z
ActiveCell.Offset(0, 24).Value = caixa_consulta4      'Atualiza Coluna "Y
ActiveCell.Offset(0, 3).Value = caixa_nome4            'Atualiza Coluna D
ActiveCell.Offset(0, 28).Value = caixa_sus4              'Atualiza Coluna AC
ActiveCell.Offset(0, 30).Value = caixa_busca4          'Atualiza Coluna AE


klaubher
Acabou de chegar
Acabou de chegar
Mensagens: 8
Registrado em: Qua Fev 14, 2018 6:19 pm

Re: Atualizar célula já Cadastrada após a coluna Z

Mensagem por klaubher »

Então. As informações que o nobre colega "srobles" nos passou inicialmente ajudou, mas quando fui corrigir as colunas pois referências numéricas que código que passei levavam em consideração a primeira coluna como 0, com a proposta de srobles a primeira coluna é 1, ai tenho que andar uma casa para frente, mas ai não atualiza mais. Apenas a coluna do nome.

Segue o banco de dados.

As informações que proponho está no formulário "ATUALIZAÇÃO"
Anexos
CADASTRO SisCAPSv185.rar
(1.07 MiB) Baixado 323 vezes


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


srobles
Jedi
Jedi
Mensagens: 805
Registrado em: Qua Mai 06, 2015 7:39 pm

Re: Atualizar célula já Cadastrada após a coluna Z

Mensagem por srobles »

klaubher,

Analisando seu modelo e testando a rotina de atualização que passei anteriormente, realmente não atualizava. Porém notei que antes de atualizar os dados você faz uso de Application.ScreenUpdating = False e apoś a atualização você não habilita isso novamente e sim, usa o Exit Sub. Acredito que o problema esteja aí, pois o correto seria habilitar novamente a atualização de tela (Application.ScreeUpdating = True), para só então, usar o Exit Sub, que ao meu ver, é muito radical dentro de um laço de verificação.

Experimente trocar a rotina AtualizarCd contida no formulário, pela que deixo abaixo.

Código: Selecionar todos

Public Sub AtualizarCd()
    '''''''Primeiramente, verificar se a caixa nome não está vazia
    If caixa_prontuario4.Value = Empty Then
        MsgBox "Prontuário vazio. Selecione primeiramente um cliente!", vbCritical, "Cadastro Vazio"
        caixa_nomepesquisa4.SetFocus 'Voltar para a seleção de cliente\paciente
        Exit Sub
    End If

    ''''''Se não estiver vazia, seguir com a atualização
    Application.ScreenUpdating = False 'Executar a rotina sem que seja vista a execução
    
    With ThisWorkbook.Sheets("BancodeDados")
        .Activate
        
        Cells(1, 1).Select
        
        With .Range("A:A")
            Dim vBusca
            Dim linhaRegistro As Long
            
                Set vBusca = .Find(LCase(caixa_prontuario4))
                
                    If Not vBusca Is Nothing Then
                        Range(vBusca.Address).Select
                        linhaRegistro = ActiveCell.Row
                        
                        Cells(linhaRegistro, "A") = caixa_prontuario4
                        Cells(linhaRegistro, "C") = caixa_nome4
                        Cells(linhaRegistro, "I") = caixa_telefone4
                        Cells(linhaRegistro, "V") = caixa_endereco4
                        Cells(linhaRegistro, "X") = caixa_consulta4
                        Cells(linhaRegistro, "Z") = caixa_dia4
                        Cells(linhaRegistro, "AC") = caixa_sus4
                        MsgBox "Dados atualizados com sucesso!", vbInformation, "ATUALIZADO"
                    Else
                        linhaRegistro = 0
                        MsgBox "Não foi possível atualizar o registro selecionado!", vbExclamation, "ERRO"
                    End If
        End With
    End With
    Application.ScreenUpdating = True
End Sub
Aguardo retorno.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder