【问题标题】:[Excel VBA]Select range from Excel and insert into Access database[Excel VBA]从Excel中选择范围并插入Access数据库
【发布时间】:2014-11-13 10:33:58
【问题描述】:

我有一个用 Excel 构建的表,稍后(操作后)将其粘贴到 Access 表中。它适用于 Windows 中的复制粘贴,但我想自动化该过程。我们正在谈论大量的列(A:AY)和大量的记录(10.000)。我已经看到它是用 ADO 记录集完成的,但只能逐行完成。有批量方法吗?

`Public Sub Test()
Dim connDB As New ADODB.Connection
'Dim rng As Range

strDBName = "Kiian.mdb"
strMyPath = "d:\Work\kiian"
strDB = strMyPath & "\" & strDBName

Dim xlXML             As Object
Dim adoRecordset      As Object
Dim rng               As Range

'this is a trick I found on the boards to easily create a recordset from range 
'without a connection, but it creates an object, not a recordset 
Sheets("mdb all").Activate
Set rng = Range("A1:ay3")
Set adoRecordset = CreateObject("ADODB.Recordset")
Set xlXML = CreateObject("MSXML2.DOMDocument")
xlXML.LoadXML rng.Value(xlRangeValueMSPersistXML)
adoRecordset.Open xlXML

connDB.Open ConnectionString:="Provider = Microsoft.ACE.OLEDB.12.0; data source=" & strDB

'delete records in the PVAnag Table:
strSQL = "INSERT INTO PVAnag SELECT * FROM adoRecordset"
'connDB.Execute CommandText:=strSQL
connDB.Execute strSQL, nr

MsgBox (nr)

'Sheets("mdb_all").Range("A1:AY3").CopyFromRecordset rstData
'close the objects
connDB.Close

'destroy the variables
Set adoRecSet = Nothing
Set connDB = Nothing
End Sub

` 所以基本上,我需要的是:从工作表中指定一个范围并将其插入到 Access 表中。任何帮助是极大的赞赏。 干杯

【问题讨论】:

  • 上面的代码有错误吗?在哪里?
  • 没有任何错误,只是它没有做任何事情,但我将这种方法搁置一旁,因为它不必要地复杂。

标签: excel vba


【解决方案1】:

一种方法(我还没有测试过)可能是在您的 Excel 项目中使用 Access 对象。 DoCmd.TransferSpreadsheet 在 Access 中导入 Excel 文件的速度非常快。 您可以通过引用 Microsoft Access Object XX.0 来使用它(XX.0 是您系统中安装的版本)。 然后,在代码中你有这样的东西:

Dim db AS Access.Application
Set db = new Access.Application

db.OpenCurrentDatabase filepath="D:\Database1.accdb", Exclusive:=True
db.DoCmd.TransferSpreadsheet 'all_params_here

db.CloseCurrentDatabase
db.Quit acQuitSaveAll

关于函数DoCmd.TransferSpreadSheet的详细信息

【讨论】:

    【解决方案2】:

    在尝试使用 TransferSpreadsheet 敲了几个小时之后,我在另一个论坛上找到了一个线索,我想出了这个:

    Public Sub a()
    
    Sheets("mdb all").Select
    Range("a1:ay3").Select
    Selection.Copy
    
    strDBName = "Kiian.mdb"
    strMyPath = "d:\Work\kiian"
    strDB = strMyPath & "\" & strDBName
    
    Set appAccess = CreateObject("Access.Application")
    ' Open database in Microsoft Access window.
    appAccess.OpenCurrentDatabase strDB
    appAccess.Visible = True
    
    appAccess.DoCmd.OpenTable "PVAnag", acViewNormal, acEdit
    appAccess.DoCmd.RunCommand acCmdPasteAppend
    
    appAccess.CloseCurrentDatabase
    appAccess.Quit acQuitSaveAll
    
    End Sub
    

    此方法使用剪贴板并仅从 Excel 中复制,打开 Access 并粘贴(特殊 = 附加)。无论出于何种原因,我都无法让 TransferSpreadsheet 工作。但感谢您的意见,让我摆脱了使用 SQL 的想法。

    【讨论】:

    • 有没有办法查看这个方法影响的记录数?
    猜你喜欢
    • 2016-02-27
    • 1970-01-01
    • 1970-01-01
    • 2018-11-11
    • 2021-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多