我目前使用以下代碼將數據從工作表導出到MS Access數據庫,代碼循環遍歷每行並將數據插入MS Access Table。使用Excel VBA將數據導出到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
上面的代碼工作的罰款幾百行的記錄,但顯然這將是更多的數據導出,像25000分的記錄,是有可能導出時不循環所有記錄,只需一個SQL INSERT語句就可以一次性將所有數據批量插入到Ms.Access表中?
任何幫助將不勝感激。
編輯:已解決的問題
只是爲了如果有人試圖對這個信息,我已經做了很多的搜索,發現下面的代碼是做工精細對我來說,它是真正的快,由於SQL INSERT(27648條記錄,在短短3秒!!!!):
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
仍在努力添加特定的字段名稱,而不是使用「SELECT *」,想盡各種辦法來添加字段名稱,但不能使它現在工作。
@Fionnuala的代碼使用的CreateObject ADO..the( 「ADODB.Connection」)將創建ADO對象.. – Ahmed 2015-07-22 04:16:00
對於.ACCDB文件,使用'SCN =「提供商= Microsoft.ACE.OLEDB。 12.0; Data Source =「&dbpath」 – 2016-10-18 14:27:36
編輯應該發佈爲答案。我認爲這是使用VBA從Excel或甚至文本文件傳輸數據的最佳方式。只需要將Excel 8.0的連接字符串更新爲新版Excel的Excel 12.0 Xlm/Excel 12.0。當然,ACE提供者相當於JET。 – L42 2017-02-23 06:46:20