I have a project that basically the goal is to generate Excel (Report) starting the Click of a button in Access using VBA.
The contents of this report is the result of a
FWIW, two things stand out:
As @Remou pointed out, Excel references need to be qualified. Currently, Range("A2")
is unqualified. When running the code in Excel, the ActiveSheet
is assumed. However, when running from another application, that application will look for a method or property in its own library called Range
, which will give you that error in Microsoft Access.
There isn't any code in the With
block, so you can remove the With
and End With
keywords; when you do this also remove the outer (), like this:
wb.Worksheets(4).QueryTables.Add Connection:=rs, Destination:=wb.Worksheets(4).Range("A2")
Alternatively, shift the With
block to the Worksheet
level:
With wb.Worksheets(4)
.QueryTables.Add Connection:=rs, Destination:=.Range("A2")
End With
Update—Access to Excel Sample
This sample code automates Excel from Access, creating a new workbook and adding a Querytable to the first sheet. The source data is an Access table. This runs in Office 2007.
Public Sub ExportToExcel()
Dim appXL As Excel.Application
Dim wbk As Excel.Workbook
Dim wst As Excel.Worksheet
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set appXL = CreateObject("Excel.Application")
appXL.Visible = True
Set wbk = appXL.Workbooks.Add
Set wst = wbk.Worksheets(1)
Set cn = CurrentProject.AccessConnection
Set rs = New ADODB.Recordset
With rs
Set .ActiveConnection = cn
.Source = "SELECT * FROM tblTemp"
.Open
End With
With wst
.QueryTables.Add Connection:=rs, Destination:=.Range("A1")
.QueryTables(1).Refresh
End With
End Sub