MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

Obrigado

Administração do MaximoAccess

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    [Resolvido]Importar dados da Planilha Excel para Tabela Access e atualizar registros existentes.

    Compartilhe

    traderboy
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 22
    Registrado : 16/01/2017

    [Resolvido]Importar dados da Planilha Excel para Tabela Access e atualizar registros existentes.

    Mensagem  traderboy em Sab 02 Set 2017, 03:50

    Amigos,

    Desde já agradeço pela disposição em me ajudar. Já busquei em vários posts relacionados a minha dúvida mas não consigo resolver o seguinte problema:

    Preciso fazer a importação dos dados de uma planilha Excel .xls. Até aí tudo bem, consegui fazer a importação para uma tabela temporária, e esta envia para outra tabela fixa. Ocorre que, na tabela fixa a chave primária é o numero do contrato, e quando o registro já existe, a importação dos dados da tabela Excel não é feita. Apenas importa os novos contratos, os que já existem, não são atualizados. Preciso que os registros já existentes sejam modificados (atualizados) pelos valores existentes na planilha Excel.

    Isso é possível?

    O que devo mudar no meu código VBA?

    Código:
    Private Sub importar_Click()
        ' Requer referencia a Microsoft Office 11 Object Library
    On Error GoTo PROC_ERR
      
       Dim fd As FileDialog
       Set fd = Application.FileDialog(msoFileDialogFilePicker)
      
       fd.Title = "selecione o arquivo"
       fd.Filters.Add "Arquivo XLS", "*.xls", 1  'se for o caso, mude a extensão para XLSX, onde estão xls

       fd.Show
      
       If (fd.SelectedItems.Count > 0) Then
           '------inicio importação excel para sincronização
           Dim strPathFile As String, strFile As String, strPath As String
           Dim strTable As String
           Dim blnHasFieldNames As Boolean
           blnHasFieldNames = True
           strPathFile = fd.SelectedItems(1)
           strTable = "TabImportTmp" 'planilha temporária que vai receber os dados do MS Excel.[/color]
          
          'apaga temporários, não é necessário, mas por segurança estou limpando a tabela antes
           DoCmd.RunSQL "Delete * from TabImportTmp"
          
           'importa para tabela local temporária
           DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, strTable, strPathFile, blnHasFieldNames
           MsgBox "Registros importados com sucesso !" & vbCrLf & _
                 "Atualizando registros", vbInformation, Me.Caption
                  
                  
            'Declaração das Variaveis
    Dim DB As Database
    Dim rs As DAO.Recordset ' tabImportTmp - onde estão os dados que serão importados
    Dim rs1 As DAO.Recordset ' tabImport -  para onde irão os dados a serem importados.


    Set DB = CurrentDb()


       'Filtra os dados da tabela de Origem e Define a tabela de Destino dos dados.
       Set rs = DB.OpenRecordset("SELECT * FROM tabImportTmp ")
       Set rs1 = DB.OpenRecordset("tabImport")


    'Inicia a Gravação dos dados na Tabela de Destino (Dim rs1 As DAO.Recordset ' tabImport ) ,repete até COPIAR todos os Registros que foram selecionados
    Do While Not rs.EOF
           'Inicia a Gravação dos dados na tabImport
           rs1.AddNew
           rs1("contrato") = rs("contrato")
           rs1("cpf") = rs("cpf")
           rs1("diasAtraso") = rs("dias Atraso")
           rs1("operacao") = rs("operação")
           rs1("divida") = rs("divida")
           rs1("acao") = rs("ação")
           rs1("contatado") = rs("contatado")
           rs1("revertido") = rs("revertido")
           rs1.Update
       rs.MoveNext
       Loop

       'Ao Final Encerra as Conexões
       rs.Close
       rs1.Close
       DB.Close
          
           MsgBox "Operação concluída.", vbInformation, Me.Caption
          
           'apaga temporarios da tblprepostotmp que recebeu a importação.
           DoCmd.RunSQL "Delete * from TabImportTmp"
          
       Else
           MsgBox "Não foi escolhido nenhum arquivo", vbInformation, Me.Caption

       End If
      
    PROC_EXIT:
       Exit Sub
      
    PROC_ERR:
       DoCmd.Hourglass False
       If Err.Number = 3011 Then
          LocalXML = ""
          MsgBox ("Arquivo inválido.")
       Else
           MsgBox Err.Description
       End If
       Resume PROC_EXIT

    End Sub

    Obrigado!
    avatar
    ahteixeira
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4394
    Registrado : 15/03/2013

    Re: [Resolvido]Importar dados da Planilha Excel para Tabela Access e atualizar registros existentes.

    Mensagem  ahteixeira em Sab 02 Set 2017, 10:14

    Olá Edson Carmo,

    Veja tópico abaixo:
    [Você precisa estar registrado e conectado para ver este link.]

    Abraço

    traderboy
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 22
    Registrado : 16/01/2017

    Re: [Resolvido]Importar dados da Planilha Excel para Tabela Access e atualizar registros existentes.

    Mensagem  traderboy em Sab 02 Set 2017, 14:53

    Ola AhTeixeira,

    Deu super certo!!!

    Fico agradecido pela ajuda rápida e certeira. Vc é d+!

    Tive que fazer uns ajustes no código de acordo com minha tabela e planilha do Excel, e também nas consultas acréscimo e atualização.

    avatar
    ahteixeira
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 4394
    Registrado : 15/03/2013

    Re: [Resolvido]Importar dados da Planilha Excel para Tabela Access e atualizar registros existentes.

    Mensagem  ahteixeira em Sab 02 Set 2017, 14:59

    Olá Edson Carmo,
    Obrigado pelo retorno.
    A solução já estava no fórum. Smile
    Abraço

      Data/hora atual: Qui 21 Set 2017, 02:36