Attualmente sto usando il seguente codice per esportare i dati dal foglio di lavoro al database MS Access, il codice scorre in looping ogni riga e inserisce i dati nella Tabella degli accessi MS.Utilizzo di Excel VBA per esportare i dati nella tabella MS Access
Public Sub TransData()
Application.ScreenUpdating = False
Application.EnableAnimations = False
Application.EnableEvents = False
Application.DisplayAlerts = False
ActiveWorkbook.Worksheets("Folio_Data_original").Activate
Call MakeConnection("fdMasterTemp")
For i = 1 To rcount - 1
rs.AddNew
rs.Fields("fdName") = Cells(i + 1, 1).Value
rs.Fields("fdDate") = Cells(i + 1, 2).Value
rs.Update
Next i
Call CloseConnection
Application.ScreenUpdating = True
Application.EnableAnimations = True
Application.EnableEvents = True
Application.DisplayAlerts = True
End Sub
Public Function MakeConnection(TableName As String) As Boolean
'*********Routine to establish connection with database
Dim DBFullName As String
Dim cs As String
DBFullName = Application.ActiveWorkbook.Path & "\FDData.mdb"
cs = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & DBFullName & ";"
Set cn = CreateObject("ADODB.Connection")
If Not (cn.State = adStateOpen) Then
cn.Open cs
End If
Set rs = CreateObject("ADODB.Recordset")
If Not (rs.State = adStateOpen) Then
rs.Open TableName, cn, adOpenKeyset, adLockOptimistic
End If
End Function
Public Function CloseConnection() As Boolean
'*********Routine to close connection with database
On Error Resume Next
If Not rs Is Nothing Then
rs.Close
End If
If Not cn Is Nothing Then
cn.Close
End If
CloseConnection = True
Exit Function
End Function
Sopra codice funziona bene per poche centinaia di righe di record, ma a quanto pare sarà più dati da esportare, come 25000 record, è possibile Esportare senza eseguire il looping di tutti i record e una sola istruzione SQL INSERT per inserire in blocco tutti i dati su Ms.Access Table in una volta sola?
Qualsiasi aiuto sarà molto apprezzato.
EDIT: Problema risolto
Solo per informazioni se qualcuno cerca per questo, ho fatto un sacco di ricerca e ho trovato il seguente codice per essere il lavoro bene per me, ed è veloce reale a causa di SQL INSERT, (27648 record in soli 3 secondi !!!!):
Public Sub DoTrans()
Set cn = CreateObject("ADODB.Connection")
dbPath = Application.ActiveWorkbook.Path & "\FDData.mdb"
dbWb = Application.ActiveWorkbook.FullName
dbWs = Application.ActiveSheet.Name
scn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbPath
dsh = "[" & Application.ActiveSheet.Name & "$]"
cn.Open scn
ssql = "INSERT INTO fdFolio ([fdName], [fdOne], [fdTwo]) "
ssql = ssql & "SELECT * FROM [Excel 8.0;HDR=YES;DATABASE=" & dbWb & "]." & dsh
cn.Execute ssql
End Sub
ancora lavorando per aggiungere campi specifici nome invece di usare "Select *", ha tentato vari modi per aggiungere i nomi dei campi, ma non può fare funziona per ora.
@Fionnuala il codice sta usando ADO..the CreateObject ("ADODB.Connection") creerà oggetto ADO .. – Ahmed
Per un file con estensione accdb, utilizzare SCN = "Provider =' Microsoft.ACE.OLEDB. 12.0; Data Source = "& dbpath' –
La modifica deve essere pubblicata come risposta. Penso che sia il modo migliore per trasferire dati da Excel o anche da file di testo usando VBA. È sufficiente aggiornare le stringhe di connessione, ad esempio da Excel 8.0 a Excel 12.0 Xlm/Excel 12.0 per le versioni più recenti di Excel. E il provider ACE equivalente per JET, ovviamente. – L42