Vídeo recomendado
https://youtu.be/diWPPPhW-9E
https://youtu.be/diWPPPhW-9E
Atualizar célula já Cadastrada após a coluna Z
Atualizar célula já Cadastrada após a coluna Z
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
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
Re: Atualizar célula já Cadastrada após a coluna Z
klaubher,
Como não disponibilizou um modelo para testes, deixo abaixo a sua rotina modificada.
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
- Reinaldo
- 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
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:
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
Re: Atualizar célula já Cadastrada após a coluna Z
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"
Segue o banco de dados.
As informações que proponho está no formulário "ATUALIZAÇÃO"
- Anexos
-
- CADASTRO SisCAPSv185.rar
- (1.07 MiB) Baixado 327 vezes
Re: Atualizar célula já Cadastrada após a coluna Z
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.
Aguardo retorno.
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