Inquiridor
Código do VBA que altera registro no Access com erro (Erro em tempo de execução '13': Tipos incompatíveis)

Pergunta
-
Boa tarde!
Tenho uma planilha no Excel que possui um cadastro de clientes onde cadastro novos clientes e realizo exclusões, porém quando executo o código para alterar um registro já existente, recebo o seguinte erro:
Erro em tempo de execução '13': Tipos incompatíveis
Este é o código que apresenta o erro:
Public Sub lsAtualizarClientes2() Dim i As Long Dim lUltimaLinhaAtiva As Long lUltimaLinhaAtiva = Worksheets("BD Clientes").Cells(Worksheets("BD Clientes").Rows.Count, 2).End(xlUp).Row For i = 3 To lUltimaLinhaAtiva Select Case Cells(i, 17).Value Case "Inserir" lsInserirClientes Cells(i, 2), Cells(i, 3), Cells(i, 4), Cells(i, 5), Cells(i, 6), Cells(i, 7), Cells(i, 8), Cells(i, 9), Cells(i, 10), Cells(i, 11), Cells(i, 12), Cells(i, 13), Cells(i, 14), Cells(i, 15), Cells(i, 16) Case "Alterar" lsAlterarClientes Cells(i, 2), Cells(i, 3), Cells(i, 4), Cells(i, 5), Cells(i, 6), Cells(i, 7), Cells(i, 8), Cells(i, 9), Cells(i, 10), Cells(i, 11), Cells(i, 12), Cells(i, 13), Cells(i, 14), Cells(i, 15), Cells(i, 16), Cells(i, 1) Case "Excluir" lsExcluirClientes Cells(i, 1) End Select Next i lsListarDadosClientes End Sub
O depurador mostra o erro nesta linha:
lsAlterarClientes Cells(i, 2), Cells(i, 3), Cells(i, 4), Cells(i, 5), Cells(i, 6), Cells(i, 7), Cells(i, 8), Cells(i, 9), Cells(i, 10), Cells(i, 11), Cells(i, 12), Cells(i, 13), Cells(i, 14), Cells(i, 15), Cells(i, 16), Cells(i, 1)
Este é o código da macro lsAlterarClientes:
Public Sub lsAlterarClientes(ByVal lnum_cpf As String, ByVal ldes_nome_completo As String, ByVal ldes_genero As String, _ ByVal lnum_nascimento As Long, ByVal ldes_rg As String, ByVal lnum_tel_1 As String, _ ByVal lnum_tel_2 As String, ByVal ldes_email As String, ByVal lnum_cep As Long, _ ByVal ldes_logradouro As String, ByVal lnum_numero As Long, ByVal ldes_complemento As String, _ ByVal ldes_bairro As String, ByVal ldes_cidade As String, ByVal ldes_uf As String, ByVal lid_cliente As Long) Dim lSQL As String If lid_cliente > 0 Then lsConectar lSQL = "UPDATE Clientes SET num_cpf = """ & lnum_cpf & """, des_nome_completo = """ & _ ldes_nome_completo & """, des_genero = """ & ldes_genero & """, num_nascimento = " & _ lnum_nascimento & ", des_rg = """ & ldes_rg & """, num_tel_1 = " & _ lnum_tel_1 & ", num_tel_2 = " & lnum_tel_2 & ", des_email = """ & _ ldes_email & """, num_cep = " & lnum_cep & ", des_logradouro = """ & _ ldes_logradouro & """, num_numero = " & lnum_numero & ", des_complemento = """ & _ ldes_complemento & """, des_bairro = """ & ldes_bairro & """, des_cidade = """ & _ ldes_cidade & """, des_uf = """ & ldes_uf & """ where id_cliente = " & lid_cliente gConexao.Execute lSQL lsDesconectar End If End Sub
A planilha onde os dados são lançados no Excel para serem exportados para o Access possui as 16 colunas listadas acima e também possui uma coluna onde é inserido o comando (Inserir, Alterar ou Excluir).
Alguém tem uma ideia do que pode estar causando este erro?
Obrigado!
Todas as Respostas
-
Bom dia Almir.
Penso que seu problema ocorre porque sua função exige dados com tipos específicos, porém na sua chamada você simplesmente insere dados da planilha sem conversão (creio que são repassados como Variant).
Para corrigir, adeque cada parâmetro passado, utilizando, por exemplo:
Compreendeu?lsAlterarClientes CStr(Cells(i, 2)), CStr(Cells(i, 3)), CStr(Cells(i, 4)), CLng(Cells(i, 5)), ...
Filipe Magno
-
Boa tarde, Filipe!
Obrigado pelo retorno.
Alterei o código da forma que você orientou, porém continuo com o mesmo erro.
lsAlterarClientes CStr(Cells(i, 2)), CStr(Cells(i, 3)), CStr(Cells(i, 4)), CLng(Cells(i, 5)), CStr(Cells(i, 6)), CStr(Cells(i, 7)), CStr(Cells(i, 8)), CStr(Cells(i, 9)), CLng(Cells(i, 10)), CStr(Cells(i, 11)), CLng(Cells(i, 12)), CStr(Cells(i, 13)), CStr(Cells(i, 14)), CStr(Cells(i, 15)), CStr(Cells(i, 16)), CLng(Cells(i, 1))
------------ EDIT ------------
Descobri o que estava acontecendo. Tinha uma coluna formatada como data no próprio Excel que recebia o valor digitado em outra célula por um código do VBA, para que só depois fosse executado o código acima, e de alguma forma o valor estava caindo na coluna de datas como texto e na hora de alterar o registro no Access dava erro. Eu usei uma fórmula para converter a data em número para depois enviar para o Access e deu certo. Obrigado!
- Editado Almir Pelet domingo, 21 de abril de 2019 22:49 Problema solucionado