首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Excel VBA将数据导出到MS Access表格

使用Excel VBA将数据导出到MS Access表格
EN

Stack Overflow用户
提问于 2013-04-23 13:47:10
回答 2查看 112.7K关注 0票数 24

我目前正在使用以下代码将数据从工作表导出到MS Access数据库,该代码循环通过每行并将数据插入到MS Access表中。

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
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,它真的很快(3秒内就有27648条记录!):

代码语言:javascript
复制
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 *",尝试了各种方法来添加字段名称,但目前还不能工作。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16161865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档