Jennifer Gross
jengross at gte.net
Wed Apr 27 17:40:29 CDT 2011
Hi Chester, I do a lot of exporting to Excel and have for quite a while. I am not sure why, but maybe because of errors like you are seeing, I prefer to loop through the recordset and export as I go. Below is the basic code I use. Make sure Tools > References include the Excel library Jennifer Gross 805-480-1921 Public Sub ToExcel() On Error GoTo ErrorHandler Dim strErrMsg As String 'for Error Handling Dim X As Integer Dim objXL As Excel.Application Dim objWkb As Excel.Workbook Dim objSht As Excel.Worksheet Dim db As DAO.Database Dim qdf As DAO.QueryDef Dim prm As DAO.Parameter Dim rsACData As DAO.Recordset Set db = CurrentDb Set qdf = db.QueryDefs("somequery") For Each prm In qdf.Parameters prm.Value = Eval(prm.Name) Next prm Set rsACData = qdf.OpenRecordset(dbOpenDynaset) 'export data to Excel If (Not rsACData.EOF) And (Not rsACData.BOF) Then If fIsAppRunning("Excel") Then Set objXL = GetObject(, "Excel.Application") Else Set objXL = CreateObject("Excel.Application") End If With objXL .Visible = False Set objWkb = .Workbooks.Add Set objSht = objWkb.Worksheets(1) With objSht .Cells(1, 1) = "Title" .Cells(2, 1) = "Another Title .Cells(1, 1).Font.Bold = True .Cells(2, 1).Font.Bold = True .Cells(3, 1) = "Column Heading" .Cells(3, 2) = "Column Heading" .Cells(3, 3) = "Column Heading" .Cells(3, 4) = "Column Heading" .Cells(3, 5) = "Column Heading" .Cells(3, 6) = "Column Heading" .Cells(3, 7) = "Column Heading" .Rows(3).Font.Bold = True .Rows(3).WrapText = True .Columns(1).ColumnWidth = 10 .Columns(2).ColumnWidth = 15 .Columns(3).ColumnWidth = 10 .Columns(4).ColumnWidth = 30 .Columns(5).ColumnWidth = 10 .Columns(6).ColumnWidth = 10 .Columns(7).ColumnWidth = 10 X = 4 rsACData.MoveFirst Do Until rsACData.EOF .Cells(X, 1) = rsACData!SomeField .Cells(X, 2) = rsACData! SomeField .Cells(X, 3) = rsACData! SomeField .Cells(X, 4) = Format(rsACData! SomeDateField, "Short Date") .Cells(X, 5) = rsACData! SomeField .Cells(X, 6) = rsACData! SomeField .Cells(X, 7) = rsACData! "=B" & X & "+C" & X & "+E" & X & "+F" & X X = X + 1 rsACData.MoveNext Loop 'totals .Cells(X, 1) = "Totals" .Cells(X, 2) = "=Sum(B4:B" & X - 1 & ")" .Cells(X, 3) = "=Sum(C4:C" & X - 1 & ")" .Cells(X, 5) = "=Sum(E4:E" & X - 1 & ")" .Cells(X, 6) = "=Sum(F4:F" & X - 1 & ")" .Columns(5).NumberFormat = "#,##0.0_)" .Columns(6).NumberFormat = "$#,##0.00_);[Red] ($#,##0.00)" .PageSetup.PrintGridlines = True .PageSetup.Orientation = xlPortrait .PageSetup.PrintTitleRows = .Rows(2).Address objXL.Visible = True objXL.Cells(4, 1).Select objXL.ActiveWindow.FreezePanes = True End With End With Else MsgBox "No data", vbOKOnly + vbExclamation, "No data" End If ExitHere: qdf.Close rsACData.Close Set db = Nothing Set objSht = Nothing Set objWkb = Nothing Set objXL = Nothing DoCmd.Hourglass False DoCmd.SetWarnings True Exit Sub ErrorHandler: Select Case Err Case 91 'do nothing - object never opened Err.Clear Resume Next Case Else strErrMsg = "An error occurred in " & "ToExcel" & vbCrLf & vbCrLf & vbCrLf strErrMsg = strErrMsg & "Error #: " & Format$(Err.Number) & vbCrLf & vbCrLf strErrMsg = strErrMsg & "Error Description: " & Err.Description MsgBox strErrMsg, vbInformation, "ToExcel" Resume ExitHere End Select End Sub -----Original Message----- From: accessd-bounces at databaseadvisors.com [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Kaup, Chester Sent: Tuesday, April 26, 2011 6:50 AM To: Access Developers discussion and problem solving Subject: [AccessD] Copy recordset to excel spreadsheet I am using the following code to copy a recordset to an excel spreadsheet. Just to be safe I check for missing references and found none.It generates an error Run time error 430 Class does not support Automation or does not support expected interface. What might I be doing wrong? Function CopytoSpreadsheet() Dim objXL As Object Dim xlWB As Object Dim xlWS As Object Dim rst As DAO.Recordset Dim fld As Field Dim strExcelFile As String Set objXL = CreateObject("Excel.Application") objXL.Visible = True Set xlWB = objXL.Workbooks.Add Set xlWS = xlWB.Worksheets(1) xlWS.Name = "Worksheet1" Set rst = CurrentDb.OpenRecordset("tbl DirectoryName") rst.MoveFirst xlWS.Range("A2").CopyFromRecordset rst xlWB.SaveAs "C:\files\Excel\SSTest.xls" rst.Close Set rst = Nothing End Function Chester Kaup Engineering Technician Kinder Morgan CO2 Company, LLP Office (432) 688-3797 FAX (432) 688-3799 -- AccessD mailing list AccessD at databaseadvisors.com http://databaseadvisors.com/mailman/listinfo/accessd Website: http://www.databaseadvisors.com