現在、次のコードを使用してワークシートから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、レコードのように、することが可能ですすべてのレコードと1つのSQL INSERT文をループせずにエクスポートすると、すべてのデータを一度にMs.Access Tableに一括挿入できますか?
ご協力いただければ幸いです。
EDIT:問題はただ、誰もがこのために求めている場合については、私は、検索をたくさん行って、私のために仕事の罰金であることを、次のコードを発見し、それが原因に速い本当できた
を解決しましたSQLのINSERT、(わずか3秒で27648件のレコードが!!!!):
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
それでも特定のフィールドを追加する作業は、「*選択」使用するのではなく、名前のフィールド名を追加するさまざまな方法を試してみましたが、作ることができませんそれは今のところうまくいく。 ExcelでAccess.Application
オブジェクトを作成し、Accessに輸入にExcelデータを、それを使用する場合は、いくつかのパフォーマンスの向上が表示されることがあり、多数の行とExcelの範囲については
@FionnualaコードがADO..theのCreateObject( "ADODB.Connectionの")を使用していること 'SCN =「プロバイダー= Microsoft.ACE.OLEDBを使用し、..の.accdbファイルについて – Ahmed
をADOオブジェクトを作成します。 12.0;データソース= "&dbpath" –
編集は回答として投稿する必要があります。 Excelから、あるいはVBAを使ってテキストファイルからデータを転送するのが最善の方法だと思います。新しいバージョンのExcelでは、Excel 8.0からExcel 12.0 Xlm/Excel 12.0などの接続文字列を更新するだけで済みます。もちろん、ACEプロバイダはJETと同等です。 – L42