NAO EDITA VBA

ALANTB 11/05/2012 11:26:27
#401799
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
MITSUEDA 11/05/2012 13:28:12
#401810
Não consegui identificar erro no codigo,

Posta a planilha ou manda no meu e-mail

mitsueda@ig.com.br

Abraço
ALANTB 11/05/2012 17:36:08
#401849
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...
MITSUEDA 11/05/2012 19:02:53
#401857
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
ALANTB 11/05/2012 20:46:35
#401858
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....
FILMAN 12/05/2012 01:27:10
#401859
Resposta escolhida
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
    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
ALANTB 13/05/2012 21:02:48
#401934
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