将访问查询的结果保存到工作表Excel VBA

时间:2016-06-25 00:54:15

标签: vba excel-vba ms-access excel

我似乎无法找到一种简单的方法,只需从ACCESS SQL View访问SQL并手动完成。是否有一些神奇的方法可以使用下面的代码并执行此操作?

值得指出的是,我正试图从Excel的VBA中做到这一点。

 'filmtimes' => array(self::HAS_MANY, 'FilmsTimesRecord', 'film_id')

1 个答案:

答案 0 :(得分:1)

只需使用初始化的ADO记录集对象,调用查询,然后运行Range.CopyFromRecordset方法(指定最左边的工作表单元格以放置结果)。

另外,请使用正确的连接字符串查看已更改的连接打开例程。并且因为记录集不会自动引入列标题而只引入数据,所以包含了一个添加的循环,它遍历记录集的字段名称。

Private Sub tryagain()
    Dim con As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim strConnection As String
    Dim i as Integer, fld As Object

    strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" _
                       & "Data Source='C:\Users\Ashleysaurus\Desktop\xyzmanu3.accdb';"

    con.Open strConnection    
    rs.Open "SELECT * FROM [Invoice Query]", con

   ' column headers
    i = 0
    Sheets(1).Range("A1").Activate
    For Each fld In rs.Fields
        ActiveCell.Offset(0, i) = fld.Name
        i = i + 1
    Next fld

    ' data rows
    Sheets(1).Range("A2").CopyFromRecordset rs

    rs.Close
    cn.Close  
End Sub

顺便说一下,上面这个设置甚至可以查询Excel工作簿,因为Jet / ACE SQL引擎是一种可用于所有Office或Windows程序的Windows技术(.dll文件)。

strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" _
                   & "Data Source='C:\Path\To\Workbook.xlsm';" _
                   & "Extended Properties=""Excel 8.0;HDR=YES;"";"

strSQL = "SELECT * FROM [Sheet1$]"