NAO EDITA VBA
Oi turma, estou tendo dificuldades em editar dados no VBA Excel.Com o código que segue abaixo ele inclui novos registros tranquilamente, verifica corretamente quando um nome já existe mas quando desejo alterar os dados ele não faz nada.é como se na hora de editar ele estivesse lendo linha=0 e não salva nada.Segue o código..(colaboração do nosso colega MITSUEDA do VBMANIA)...Alguma idéia????
[ô]Vamos criar uma função que verifica se existe o nome cadastrado na planilha
Private Function Existe(ByVal strNome As String) As Long
[ô]Declarando uma variavel que representará a planilha
Dim shtDado As Worksheet
[ô]Declarando varivel que irá pegar a ultima linha preenchida na coluna A
Dim intUltLinha As Long
[ô]Declarando a variavel que será usada como icremento no laço For
Dim x As Long
[ô]Carregando a variavel
Set shtDado = ThisWorkbook.Sheets([Ô]Dado[Ô])
[ô]Capturando a ultima linha preenchida na coluna A
intUltLinha = shtDado.Range([Ô]B65536[Ô]).End(xlUp).Row
[ô]Executando um loop For da 1 linha até a ultima linha da coluna A
For x = 1 To intUltLinha
[ô]Caso o nome fornecido para a função seja igual ao da linha que o laço esteja lendo
If strNome = shtDado.Cells(x, 2).Value Then
[ô]Retornar o numero da linha em questão
Existe = x
[ô]E sair do laço For
Exit For
End If
Next
[ô]Descarregando a variavel
Set shtDado = Nothing
End Function
-------------------------------------------
Private Sub cmdSalvar_Click()
Dim lngEdit As Long
[ô]Declarando uma variavel que representará a planilha
Dim shtDado As Worksheet
[ô]Declarando varivel que irá pegar a ultima linha preenchida na coluna A
Dim intUltLinha As Long
[ô]Declarando a variavel que retorna a resposta a uma msgbox
Dim intRetVal As Integer
[ô]Carregando a variavel
Set shtDado = ThisWorkbook.Sheets([Ô]Dado[Ô])
[ô]Capturando a ultima linha preenchida na coluna A
intUltLinha = shtDado.Range([Ô]B65536[Ô]).End(xlUp).Row + 1
[ô]If Me.TxtCod.Value = 0 Then
If VBA.Len(VBA.Trim(Me.lblNome.Caption)) = 0 Then
MsgBox [Ô]O Código é um campo obrigatorio!!![Ô], vbOKOnly + vbCritical, [Ô]Telefones[Ô]
Exit Sub
Else
lngEdit = Existe(Me.lblNome.Caption)
If lngEdit = 0 Then
shtDado.Cells(intUltLinha, 1).Value = Me.TxtCod.Value
shtDado.Cells(intUltLinha, 2).Value = Me.lblNome.Caption
shtDado.Cells(intUltLinha, 3).Value = Me.ComboBox_Local.Value
shtDado.Cells(intUltLinha, 4).Value = Me.ComboBox_Setor.Value
shtDado.Cells(intUltLinha, 5).Value = Me.ComboBox_UF.Value
shtDado.Cells(intUltLinha, 6).Value = Me.ComboBox_Cidade.Value
shtDado.Cells(intUltLinha, 7).Value = Me.txtTel.Value
shtDado.Cells(intUltLinha, 8).Value = Me.txtCel.Value
Else
[ô]lngEdit = Existe(Me.lblNome.Caption)
intRetVal = MsgBox([Ô]O contato [Ô] & Me.lblNome.Caption & [Ô], Já existe![Ô] & vbCrLf & vbCrLf & _
[Ô]Deseja altera-lo?[Ô], vbYesNo + vbInformation, [Ô]Telefones[Ô])
If intRetVal = vbYes Then
[ô]lngEdit = Existe(Me.lblNome.Caption)
shtDado.Cells(lngEdit, 1).Value = Me.TxtCod.Value
shtDado.Cells(lngEdit, 2).Value = Me.lblNome.Caption
shtDado.Cells(lngEdit, 3).Value = Me.ComboBox_Local.Value
shtDado.Cells(lngEdit, 4).Value = Me.ComboBox_Setor.Value
shtDado.Cells(lngEdit, 5).Value = Me.ComboBox_UF.Value
shtDado.Cells(lngEdit, 6).Value = Me.ComboBox_Cidade.Value
shtDado.Cells(lngEdit, 7).Value = Me.txtTel.Value
shtDado.Cells(lngEdit, 8).Value = Me.txtCel.Value
End If
End If
End If
cmdLimpar_Click
End Sub
[ô]Vamos criar uma função que verifica se existe o nome cadastrado na planilha
Private Function Existe(ByVal strNome As String) As Long
[ô]Declarando uma variavel que representará a planilha
Dim shtDado As Worksheet
[ô]Declarando varivel que irá pegar a ultima linha preenchida na coluna A
Dim intUltLinha As Long
[ô]Declarando a variavel que será usada como icremento no laço For
Dim x As Long
[ô]Carregando a variavel
Set shtDado = ThisWorkbook.Sheets([Ô]Dado[Ô])
[ô]Capturando a ultima linha preenchida na coluna A
intUltLinha = shtDado.Range([Ô]B65536[Ô]).End(xlUp).Row
[ô]Executando um loop For da 1 linha até a ultima linha da coluna A
For x = 1 To intUltLinha
[ô]Caso o nome fornecido para a função seja igual ao da linha que o laço esteja lendo
If strNome = shtDado.Cells(x, 2).Value Then
[ô]Retornar o numero da linha em questão
Existe = x
[ô]E sair do laço For
Exit For
End If
Next
[ô]Descarregando a variavel
Set shtDado = Nothing
End Function
-------------------------------------------
Private Sub cmdSalvar_Click()
Dim lngEdit As Long
[ô]Declarando uma variavel que representará a planilha
Dim shtDado As Worksheet
[ô]Declarando varivel que irá pegar a ultima linha preenchida na coluna A
Dim intUltLinha As Long
[ô]Declarando a variavel que retorna a resposta a uma msgbox
Dim intRetVal As Integer
[ô]Carregando a variavel
Set shtDado = ThisWorkbook.Sheets([Ô]Dado[Ô])
[ô]Capturando a ultima linha preenchida na coluna A
intUltLinha = shtDado.Range([Ô]B65536[Ô]).End(xlUp).Row + 1
[ô]If Me.TxtCod.Value = 0 Then
If VBA.Len(VBA.Trim(Me.lblNome.Caption)) = 0 Then
MsgBox [Ô]O Código é um campo obrigatorio!!![Ô], vbOKOnly + vbCritical, [Ô]Telefones[Ô]
Exit Sub
Else
lngEdit = Existe(Me.lblNome.Caption)
If lngEdit = 0 Then
shtDado.Cells(intUltLinha, 1).Value = Me.TxtCod.Value
shtDado.Cells(intUltLinha, 2).Value = Me.lblNome.Caption
shtDado.Cells(intUltLinha, 3).Value = Me.ComboBox_Local.Value
shtDado.Cells(intUltLinha, 4).Value = Me.ComboBox_Setor.Value
shtDado.Cells(intUltLinha, 5).Value = Me.ComboBox_UF.Value
shtDado.Cells(intUltLinha, 6).Value = Me.ComboBox_Cidade.Value
shtDado.Cells(intUltLinha, 7).Value = Me.txtTel.Value
shtDado.Cells(intUltLinha, 8).Value = Me.txtCel.Value
Else
[ô]lngEdit = Existe(Me.lblNome.Caption)
intRetVal = MsgBox([Ô]O contato [Ô] & Me.lblNome.Caption & [Ô], Já existe![Ô] & vbCrLf & vbCrLf & _
[Ô]Deseja altera-lo?[Ô], vbYesNo + vbInformation, [Ô]Telefones[Ô])
If intRetVal = vbYes Then
[ô]lngEdit = Existe(Me.lblNome.Caption)
shtDado.Cells(lngEdit, 1).Value = Me.TxtCod.Value
shtDado.Cells(lngEdit, 2).Value = Me.lblNome.Caption
shtDado.Cells(lngEdit, 3).Value = Me.ComboBox_Local.Value
shtDado.Cells(lngEdit, 4).Value = Me.ComboBox_Setor.Value
shtDado.Cells(lngEdit, 5).Value = Me.ComboBox_UF.Value
shtDado.Cells(lngEdit, 6).Value = Me.ComboBox_Cidade.Value
shtDado.Cells(lngEdit, 7).Value = Me.txtTel.Value
shtDado.Cells(lngEdit, 8).Value = Me.txtCel.Value
End If
End If
End If
cmdLimpar_Click
End Sub
Não consegui identificar erro no codigo,
Posta a planilha ou manda no meu e-mail
mitsueda@ig.com.br
Abraço
Posta a planilha ou manda no meu e-mail
mitsueda@ig.com.br
Abraço
Segue a planilha...no form DADOS não to conseguindo editar telefones, cidades, cel,....Seleciona no combo, carrega o form e na hora de editar nao faz nada...
Cara essa planilha tá estranha.
Você adicionou algum controle ocx ou dll que não foi registrado?
Porque existe uma referencia ausente no projeto.
Um conselho é exportar o formulario para um local qualquer e importar de outra planilha para o projeto.
Se eu tiver um tempo no fim de semana eu dou uma olhada.
Mas tenta isso.
Abraço
Você adicionou algum controle ocx ou dll que não foi registrado?
Porque existe uma referencia ausente no projeto.
Um conselho é exportar o formulario para um local qualquer e importar de outra planilha para o projeto.
Se eu tiver um tempo no fim de semana eu dou uma olhada.
Mas tenta isso.
Abraço
Não adicionei nada de diferente, mas podem ver que essa planilha é estilo frankestein, uma mistura de trechos de códigos de outros projetos e também da colaboração dos colegas daqui do forum. Vou continuar tentando....
Segue anexo o link
Tem o que esta precisando
http://www.vbmania.com.br/pages/index.php?varModulo=Forum&varMethod=abrir&varID=380301&varWorld=
Lembrando que a pouco dias você abriu um tópico com a mesma duvida e o encerrou se o problema persistir reabra o tópico
Mais lembrando que verifiquei seu código e aqui consegui fazer funcionar
no Botão Gravar do FORM frmMov
ele faz a verificação do cadastro se estiver cadastrado verifica se quer alterar é nessa hora que o problema esta acontecendo
Parte do Código
onde esta em vermelho eu comentei no código e funcionou !
Não consegui verificar o porque mais quando a celula recebe o lblNome ele aponta para o combo_Nome_Change()
ou seja que gerar novamente a cidade, Uf, local, ou seja refaz os dados alterado para o que esta na planilha e é por isso que
parece que não alterou mais alterou
Comente a linha que esta no código acima que vai dar certo
Tem o que esta precisando
http://www.vbmania.com.br/pages/index.php?varModulo=Forum&varMethod=abrir&varID=380301&varWorld=
Lembrando que a pouco dias você abriu um tópico com a mesma duvida e o encerrou se o problema persistir reabra o tópico
Mais lembrando que verifiquei seu código e aqui consegui fazer funcionar
no Botão Gravar do FORM frmMov
ele faz a verificação do cadastro se estiver cadastrado verifica se quer alterar é nessa hora que o problema esta acontecendo
Parte do Código
Else
If lngEdit <> 0 Then
intRetVal = MsgBox([Ô]O contato [Ô] & Me.lblNome.Caption & [Ô], Já existe![Ô] & vbCrLf & vbCrLf & _
[Ô]Deseja altera-lo?[Ô], vbYesNo + vbInformation, [Ô]Telefones[Ô])
If intRetVal = vbYes Then
atualiza = True
[ô]lngEdit = Existe(Me.lblNome.Caption)
shtDado.Cells(lngEdit, 1).Value = TxtCod
[txt-color=#e80000][ô]shtDado.Cells(lngEdit, 2).Value = lblNome.Caption[/txt-color]
shtDado.Cells(lngEdit, 3).Value = ComboBox_Local
shtDado.Cells(lngEdit, 4).Value = ComboBox_Setor
shtDado.Cells(lngEdit, 5).Value = ComboBox_UF
shtDado.Cells(lngEdit, 6).Value = ComboBox_Cidade
shtDado.Cells(lngEdit, 7).Value = txtTel
shtDado.Cells(lngEdit, 8).Value = txtCel
End If
End If
End If
onde esta em vermelho eu comentei no código e funcionou !
Não consegui verificar o porque mais quando a celula recebe o lblNome ele aponta para o combo_Nome_Change()
ou seja que gerar novamente a cidade, Uf, local, ou seja refaz os dados alterado para o que esta na planilha e é por isso que
parece que não alterou mais alterou
Comente a linha que esta no código acima que vai dar certo
Valeu a atençao FILMAN, aqui também funcionou. E obriado também ao nosso colea MITSUEDA...vou encerrrar..
Tópico encerrado , respostas não são mais permitidas