Vídeo recomendado
https://youtu.be/diWPPPhW-9E
https://youtu.be/diWPPPhW-9E
Alterar valor já existente
Alterar valor já existente
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
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
Re: Alterar valor já existente
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....
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....
- BaptistaCG
- Colaborador
- Mensagens: 96
- Registrado em: Seg Jul 30, 2012 10:33 pm
- Localização: Sorocaba/SP
Re: Alterar valor já existente
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...
Espero que resolva, qualquer dúvida é só postar.
Abraço.
Att...
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
Abraço.
Att...
Re: Alterar valor já existente
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
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
- BaptistaCG
- Colaborador
- Mensagens: 96
- Registrado em: Seg Jul 30, 2012 10:33 pm
- Localização: Sorocaba/SP
Re: Alterar valor já existente
Fica tranquilo e não se preocupe meu amigo, o forum esta aqui para isso ajudar a todos.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
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.
Abraço...
Re: Alterar valor já existente
Olá, boa noite!
Troque seu código por este:
Abraço....
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
Re: Alterar valor já existente
Olá mais uma vez...
Remeto ficheiro com exemplo do que se passa, se me puderem ajudar...
Abraços e bom fim de semana
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
Re: Alterar valor já existente
Olá, boa noite
Troque o código do CmdAlterar por este:
abraço...
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
Re: Alterar valor já existente
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
Como não percebo quase nada de VBA, irei-vos continuar a chatear pois sei que aqui iram-me ajudar. Muito obrigado a todos