将查询从 Access 复制到 Excel

Posted

技术标签:

【中文标题】将查询从 Access 复制到 Excel【英文标题】:Copy Query from Access to Excel 【发布时间】:2018-03-28 03:24:52 【问题描述】:

我在尝试将查询从 Access 导入 Excel 时遇到了一些问题。

几天前,我编写了一个代码(在 Google 的帮助下哈哈)将表格从 Access 导入 Excel:

Sub importQuery(DBFullName As String, data_sht As Worksheet)

     Dim cn As Object, rs As Object

     Dim i As Integer

     Dim TargetRange As Range

     Dim rows As Long, cols As Long

     Dim dataEmpty As Boolean

     Dim lastColString As String



     data_sht.Activate   

     Application.ScreenUpdating = False

     Set TargetRange = data_sht.Range("A1")

     Set cn = CreateObject("ADODB.Connection")

     cn.Open "Provider=Microsoft.Ace.OLEDB.12.0; Data Source=" & DBFullName & ";" 'the Access file is .accdb


     Set rs = CreateObject("ADODB.Recordset")

     rs.Open "SELECT * FROM C_Paso2_SM_Cuplas", cn, , , adCmdUnspecified

     cols = rs.Fields.Count

     rows = data_sht.Range("A" & data_sht.rows.Count).End(xlUp).Row 

     ' Copy titles of the Access Query

     For i = 0 To (cols - 1)

         TargetRange.Offset(0, i).Value = rs.Fields(i).Name

     Next

     ' Copy data

     TargetRange.Offset(1, 0).CopyFromRecordset rs
End Sub

该代码有效,但当我这样做时:

rs.Open "SELECT * FROM C_Paso2_SM_Cuplas", cn, , , adCmdUnspecified

我正在从同一个文件中导入另一个名为 C_Paso1_SM_Cuplas 的查询。我能做些什么?为什么我说 C_Paso2_SM_Cuplas 时要导入 C_Paso1_SM_Cuplas?是否有其他可能将 Access Query 导入 Excel?

【问题讨论】:

我不太确定你在问什么。您发布的有问题的查询与您的代码中的查询完全相同。有什么问题?你遇到了什么错误? 我正在尝试导入 C_Paso2_SM_Cuplas 但代码导入了 C_Paso1_SM_Cuplas!看到区别:我需要 Paso2,它导入 Paso1。当我导入表而不是查询时,它工作正常 C_Paso2_SM_Cuplas有记录吗?在End Sub之前添加rs.CloseSet rs = Nothingcn.CloseSet cn = Nothing 不,只有一个 C_Paso2_SM_Cuplas。但是data_sht中粘贴的数据是来自C_Paso1_SM_Cuplas的数​​据 你的代码可以显示C_Paso2_SM_Cuplas的标题吗? 【参考方案1】:

试试这个 DAO 解决方案。

Sub ImportFromAccessToExcel()

    Dim db1 As Database
    Dim db2 As Database
    Dim recSet As Recordset
    Dim strConnect As String

    Set db1 = OpenDatabase("C:\Database1.mdb")
    strConnect = db1.QueryDefs("Query3").Connect _
    & "DSN=myDsn;USERNAME=myID;PWD=myPassword"

    Set db2 = OpenDatabase("", False, False, strConnect)
    db2.Close
    Set db2 = Nothing

    Set recSet = db1.OpenRecordset("Query3")

    With ActiveSheet.QueryTables.Add(Connection:=recSet, Destination:=Range("$A$4"))
        .Name = "Connection"
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .Refresh BackgroundQuery:=False

    End With

    recSet.Close
    db1.Close
    Set recSet = Nothing
    Set db1 = Nothing

End Sub

【讨论】:

我可以在星期二试一试。但是为什么需要密码?这是一个访问文件。它会在 .accdb 而不是 .mdb 中工作吗?谢谢 这只是一个例子。如果您不需要密码,只需将其保留。您可以使用下面的链接找到 Access 的各种连接字符串。 connectionstrings.com/access

以上是关于将查询从 Access 复制到 Excel的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python 将数据从 MS Access 复制到 MS Excel

将查询从 SQL 服务器复制到 MS Access

如何从 Access 复制粘贴“设计视图”到 excel?

使用 VBA 获取 Excel 选项卡名称并复制到 Access 表

MS Access:需要按两次退格键才能删除从 Excel 复制过来的一个字符

VBA中的Excel过滤和复制