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

  • 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!

    sábado, 20 de abril de 2019 18:09

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:

    lsAlterarClientes CStr(Cells(i, 2)), CStr(Cells(i, 3)), CStr(Cells(i, 4)), CLng(Cells(i, 5)), ...

    Compreendeu?

    Filipe Magno

    domingo, 21 de abril de 2019 13:48
  • 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
    domingo, 21 de abril de 2019 21:15