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

Alterar valor já existente

Fórum para dúvidas sobre os fundamentos da linguagem de programação Visual Basic no contexto do VBA
selhas
Colaborador
Colaborador
Mensagens: 31
Registrado em: Ter Mai 08, 2012 9:31 am

Alterar valor já existente

Mensagem por selhas »

Caros amigos
Mais uma vez venho pedir a vossa ajuda, a situação é a seguinte:
Tenho uma userform que ao pedir para efectuar pesquisa, a mesma carrega os campos correctamente, no entanto o passo seguinte será alterar esses mesmos dados, só que com o código a seguir descriminado ele altera-me o valor da(s) coluna(s) toda(s), o que estarei eu a fazer mal?

Private Sub CmdAlterar_Click()

Dim ShCadastro As Worksheet
Dim fimbase
Dim consulta
Dim sName As String

sName = TxtDataEntrada.Value

Set ShCadastro = Sheets("DADOS")

'Consulta Dados Cadastro
ShCadastro.Activate

fimbase = Range("A60000").End(xlUp).Row
For consulta = 5 To fimbase
With ShCadastro
sName = .Cells(consulta, 4).Value 'Data entrada
.Cells(consulta, 5).Value = CboQuem 'Quem Denunciante
'.Cells(consulta, 6).Value = TxtBairro 'Bairro
'.Cells(consulta, 7).Value = txtObs 'Observação
'End If
End With
Next
MsgBox "Registo alterado com sucesso!"
Call DesbloquearPesquisa
Call Limpar
Call Bloquear
ChkAlterar.Value = False
ChkAlterar.Visible = False
CmdAlterar.Enabled = False
TxtDataEntrada.SetFocus
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.


Avatar do usuário
McJota
Colaborador
Colaborador
Mensagens: 26
Registrado em: Sáb Out 13, 2012 10:16 pm

Re: Alterar valor já existente

Mensagem por McJota »

Olá, bom dia!
Creio que o que está alterando todos os dados é o uso do "For", pois com ele está fazendo um Loop em toda a coluna "A" e alterando todas as linhas!
Experimente usar o código sem o "For Next".

Abraço....


Avatar do usuário
BaptistaCG
Colaborador
Colaborador
Mensagens: 96
Registrado em: Seg Jul 30, 2012 10:33 pm
Localização: Sorocaba/SP

Re: Alterar valor já existente

Mensagem por BaptistaCG »

Olá,

Veja se isto resolve, lembre-se de corrigir a nomenclatura dos textsboxs ai, como o McJota disse o erro é realmente no for...next... pois ele esta fazendo a rotina em todos os campos independendo do valor da txtalterarentrada, usei o modulo .find para esse processo simplificando também a sua macro...

Código: Selecionar todos

Private Sub CmdAlterar_Click()
If TxtDataEntrada <> "" Then
    
    Set y = Sheets("DADOS").Columns("E:E").Find(TxtDataEntrada, LOOKAT:=xlWhole)
    If y Is Nothing Then
    MsgBox "Não Encontrado!", vbInformation, "ERRO"
    Else
    y.Offset(0, 1).Value = TextBox1
    y.Offset(0, 2).Value = TextBox2
    y.Offset(0, 3).Value = TextBox3
    MsgBox "Registro alterado com sucesso!", vbInformation, "SALVO"
    End If
    Call DesbloquearPesquisa
    Call Limpar
    Call Bloquear
    ChkAlterar.Value = False
    ChkAlterar.Visible = False
    CmdAlterar.Enabled = False
    
    TxtDataEntrada = ""
    TextBox1 = ""
    TextBox2 = ""
    TextBox3 = ""
    TxtDataEntrada.SetFocus
Else
    MsgBox "TxtDataEntrada está vazio", vbCritical, "Vazio"
End If

End Sub
Espero que resolva, qualquer dúvida é só postar.
Abraço.
Att...


selhas
Colaborador
Colaborador
Mensagens: 31
Registrado em: Ter Mai 08, 2012 9:31 am

Re: Alterar valor já existente

Mensagem por selhas »

Desde já obrigado a ambos.... No entanto eu não percebo nada de VBA e estou a tentar fazer algo por isso peço ajuda e vou fazendo através de ideias que vão aparecendo por aí.
No código colocado pelo BaptistaCG dá-me erro como o Y - Variável não está definida. neste caso o Y é o Worksheet ou qual é a variável ?????Se for Worksheet o que quer dizer offset.

desculpem a minha ignorancia


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.


Avatar do usuário
BaptistaCG
Colaborador
Colaborador
Mensagens: 96
Registrado em: Seg Jul 30, 2012 10:33 pm
Localização: Sorocaba/SP

Re: Alterar valor já existente

Mensagem por BaptistaCG »

selhas escreveu:Desde já obrigado a ambos.... No entanto eu não percebo nada de VBA e estou a tentar fazer algo por isso peço ajuda e vou fazendo através de ideias que vão aparecendo por aí.
No código colocado pelo BaptistaCG dá-me erro como o Y - Variável não está definida. neste caso o Y é o Worksheet ou qual é a variável ?????Se for Worksheet o que quer dizer offset.

desculpem a minha ignorancia
Fica tranquilo e não se preocupe meu amigo, o forum esta aqui para isso ajudar a todos.

coloque dim y antes da execução da variavel é que esqueci de declarar ela rsrs, deixe assim no começo do código:

Código: Selecionar todos

Private Sub CmdAlterar_Click()
dim y
If TxtDataEntrada <> "" Then

a variavel y é apenas uma variavel do tipo variant que coloquei para utilizar a propriedade .offset, está propriedade significa compensar, mais conhecida como um tipo de "saida" de algum objeto.
.offset é composto de (linha,coluna) que irá avançar.

O cod que escrevi significa:

y = na planilha "DADOS" coluna "E" procurar pela palavra que estiver no (TxtDataEntrada, procura por valor idêntico)
Se verdadeiro irá retornar a próxima ação que colocar no cód e se falso irá retornar "nothing" então:

se y é nothing então
mensagem não encontrado
se não ou seja Verdadeiro então
y mais zero linhas a baixo e 1 coluna a direita é igual a conteudo da textbox1
y mais zero linhas a baixo e 2 colunas a direita é igual a conteudo da textbox2
y mais zero linhas a baixo e 3 colunas a direita é igual a conteudo da textbox3
mensagem Registro alterado com sucesso


Bom tentei ser o mais claro possível em minha explicação, espero que lhe ajude. :D

Abraço...


Avatar do usuário
McJota
Colaborador
Colaborador
Mensagens: 26
Registrado em: Sáb Out 13, 2012 10:16 pm

Re: Alterar valor já existente

Mensagem por McJota »

Olá, boa noite!
Troque seu código por este:

Código: Selecionar todos

Private Sub CmdAlterar_Click()
If TxtDataEntrada <> "" Then
With WorkSheets("DADOS").Range("E:E")
    Set y =.Find(TxtDataEntrada, LOOKAT:=xlWhole)
    If y Is Nothing Then
    MsgBox "Não Encontrado!", vbInformation, "ERRO"
    Else
    Y.Select
    ActiveCell.Offset(0, 1).Value = TextBox1
    ActiveCell.Offset(0, 2).Value = TextBox2
    ActiveCell.Offset(0, 3).Value = TextBox3
    MsgBox "Registro alterado com sucesso!", vbInformation, "SALVO"
    End If
    Call DesbloquearPesquisa
    Call Limpar
    Call Bloquear
    ChkAlterar.Value = False
    ChkAlterar.Visible = False
    CmdAlterar.Enabled = False
    
    TxtDataEntrada = ""
    TextBox1 = ""
    TextBox2 = ""
    TextBox3 = ""
    TxtDataEntrada.SetFocus
Else
    MsgBox "TxtDataEntrada está vazio", vbCritical, "Vazio"
End With
End If
End Sub
Abraço....


selhas
Colaborador
Colaborador
Mensagens: 31
Registrado em: Ter Mai 08, 2012 9:31 am

Re: Alterar valor já existente

Mensagem por selhas »

Olá mais uma vez...
Remeto ficheiro com exemplo do que se passa, se me puderem ajudar...
Abraços e bom fim de semana
Anexos
Duvida.zip
(112.2 KiB) Baixado 245 vezes


Avatar do usuário
McJota
Colaborador
Colaborador
Mensagens: 26
Registrado em: Sáb Out 13, 2012 10:16 pm

Re: Alterar valor já existente

Mensagem por McJota »

Olá, boa noite
Troque o código do CmdAlterar por este:

Código: Selecionar todos

Private Sub CmdAlterar_Click()
Dim c As Variant
If TxtNome = "" Then
MsgBox "TxtNome está vazio", vbCritical, "Vazio"
Else
  With Worksheets("DADOS").Range("F:F")
  Set c = .Find(TxtNome.Value)
   If c Is Nothing Then
      MsgBox "Não Encontrado!", vbInformation, "ERRO"
   Else
      c.Select
      ActiveCell.Offset(0, -2).Value = TxtData.Value
      ActiveCell.Offset(0, -1).Value = CboEnvio.Value
      ActiveCell.Value = TxtNome.Value
      ActiveCell.Offset(0, 1).Value = TxtMorada.Value
      ActiveCell.Offset(0, 2).Value = TxtCidade.Value
      ActiveCell.Offset(0, 3).Value = TxtEmail.Value
      ActiveCell.Offset(0, 4).Value = TxtTelefone.Value
         If OptSim = True Then
            ActiveCell.Offset(0, 5).Value = "Sim"
            ActiveCell.Offset(0, 6).Value = TxtObservacoes.Value
         Else
            ActiveCell.Offset(0, 5).Value = "Não"
            ActiveCell.Offset(0, 6).Value = ""
         End If
      ActiveCell.Offset(0, 7).Value = CboConclusao.Value
      MsgBox "Registro alterado com sucesso!", vbInformation, "SALVO"
    End If
  Call DesbloquearPesquisa
  Call Limpar
  Call BloquearPesquisa
  ChkAlterar.Value = False
  ChkAlterar.Visible = False
  CmdAlterar.Enabled = False
End With
End If
End Sub
abraço...


selhas
Colaborador
Colaborador
Mensagens: 31
Registrado em: Ter Mai 08, 2012 9:31 am

Re: Alterar valor já existente

Mensagem por selhas »

Obrigado deu resultado.
Como não percebo quase nada de VBA, irei-vos continuar a chatear pois sei que aqui iram-me ajudar. Muito obrigado a todos


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