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?
Obrigado!
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!