【发布时间】:2016-03-31 19:01:29
【问题描述】:
我正在尝试自动将查询结果从 Access 2010 导出到 Excel 2010。这并不容易,因为 Access 使用的是链接表 (SQL Server 2008 R2)。我知道这可以手动完成,但我真的很想自动化这个过程。
当我尝试单步执行位于 Access 中的以下 VBA 代码时,我到达了这一行,然后它一直在运行,永远不会超过这一点
Set wbTarget = XL.Workbooks.Open("H:\TATData\Test.xlsx")
(没有错误信息)
在将查询复制到 VBA 编辑器之前,我已经对其进行了测试,因此我知道查询可以正常工作,而且速度非常快,但不是自动化的。我还在需要的 Access 中设置了 MS Excel 库。
请帮助弄清楚需要做什么才能使其正常工作。 我必须杀死 Access 才能让它停止运行。
这是我的代码:
Public Sub ExportToExcel()
'Step 1: Declare your variables
Dim XL As Excel.Application
Dim excelApp As Object
Dim wbTarget As Workbook
Dim sht As Worksheet
Dim qdfTestData As QueryDef
Dim rsTestData As Recordset
Dim strSQL As String
Dim i As Integer
strSQL = "SELECT dbo_Patient.firstnm, dbo_Patient.lastnm, dbo_Sample.SampleDt, dbo_Test.TestTypeCd "
strSQL = strSQL & "FROM (dbo_Patient INNER JOIN dbo_Sample ON dbo_Patient.PatientId = dbo_Sample.PatientId) INNER JOIN dbo_Test ON dbo_Sample.SampleID = dbo_Test.SampleId "
strSQL = strSQL & "WHERE (((dbo_Test.TestTypeCd)='FL_XM_ALLO'));"
'set up reference to the query to export
CurrentDb.QueryDefs.Delete ("qrTest")
'set up reference to the query to export
Set qdfTestData = CurrentDb.CreateQueryDef("qrTest", strSQL)
'Execute the query
Set rsTestData = qdfTestData.OpenRecordset()
'Create a new Excel instance.
Set excelApp = CreateObject("Excel.Application")
'Set reference to the export workbook
'Set wbTarget = XL.Workbooks.Open("H:\TATData\Test.xlsx")
Set wbTarget = excelApp.Workbooks.Add
Set sht = wbTarget.Worksheets("Sheet1")
'clear excel sheet
On Error GoTo 0
excelApp.Visible = True
On Error GoTo Errorhandler
wbTarget.Worksheets("Sheet1").Cells.ClearContents
'Use paste from recordset to put in excel sheet
wbTarget.Worksheets("Sheet1").Cells(2, 1).CopyFromRecordset rsTestData
'clear excel sheet
Errorhandler:
DoCmd.SetWarnings True
MsgBox Err.Description, vbExclamation, Err.Number
Exit Sub
'wbTarget.Save
End Sub
【问题讨论】:
-
请参阅上面的更新代码。我现在收到错误“430”类不支持自动化。有没有希望让它发挥作用?谢谢
-
它转到错误处理程序,所以可能是
excelApp.Visible = True..如果我删除错误处理程序,它会在wbTarget.Worksheets("Sheet1").Cells(2, 1).CopyFromRecordset rsTestData停止并显示错误 430 消息。 -
是的,它确实可以打开它......它只是不复制数据。
-
我怀疑您能否将在 Access 中创建的记录集传递给 Excel 方法
CopyFromRecordset。您不必通过XL对象创建记录集吗?
标签: ms-access sql-server-2008-r2 vba