[AccessD] Exporting From Access to Excel

Elam, Debbie DElam at jenkens.com
Thu May 17 10:00:04 CDT 2007


I found a bit of code that allows me to export to specific worksheets in
Excel.  The intent being that I would have a 3 worksheet export of a report.
The code works very well except for one little snag at the end.  I get a
runtime error 7952, you made an illegal function call, and the resulting
spreadsheet is the same size as the template.  When I open the worksheet, it
actually opens 2 of them, one that has only the template info in it that has
the file name I designated, and a second underneath that is correct and
apparently not saved?  I can save this but it generally will not save under
the filename I designated.  I tried adding a save command to the end of the
code, but it simply says I already have a file with that name do I want to
replace.  Clicking yes is ignored and it brings up a dialog to save it as
[filename]1.xls.  Once again [filename].xls is blank except for template
included items and the [filename]1.xls comes out like I planned.  This one
does not seem to have the full file hiding in it either.  This is a lot
better than having the "good" file hide inside the blank one, but still not
really where I would like it to be for less tech savvy users. 

Here is the code:


Public Function ExportRequestHardCode(strTemplate As String, strOutputFile
As String) As String
   On Error GoTo err_Handler
   
   ' Excel object variables
   Dim appExcel As Excel.Application
   Dim wbk As Excel.Workbook
   Dim wks As Excel.Worksheet
   Dim sTemplate As String
   Dim sTempFile As String
   Dim sOutput As String
   
   Dim dbs As DAO.Database
   Dim rst As DAO.Recordset
   Dim sSQL As String
   Dim lRecords As Long
   Dim iRow As Integer
   Dim iCol As Integer
   Dim iFld As Integer
   
   Const cTabTwo As Byte = 2
   Const cStartRow As Byte = 2
   Const cStartColumn As Byte = 1
   
   DoCmd.Hourglass True
   
   ' set to break on all errors
   Application.SetOption "Error Trapping", 0
   
   ' start with a clean file built from the template file
   sTemplate = CurrentProject.Path & strTemplate
   sOutput = strOutputFile
   'If Dir(sOutput) <> "" Then Kill sOutput
   FileCopy strTemplate, sOutput
   
   ' Create the Excel Applicaiton, Workbook and Worksheet and Database
object
   Set appExcel = Excel.Application
   Set wbk = appExcel.Workbooks.Open(sOutput)

StartofTab1:
   Set wks = appExcel.Worksheets(1)
   sSQL = "AAAllConsolidatedUnionOlderThan2K"
   Set dbs = currentdb
   Set rst = dbs.OpenRecordset(sSQL, dbOpenSnapshot)
   
   ' For this template, the data must be placed on the 4th row, third
column.
   ' (these values are set to constants for easy future modifications)
   iCol = 1
   iRow = 2
   If Not rst.BOF Then rst.MoveFirst
   Do Until rst.EOF
      iFld = 0
      lRecords = lRecords + 1
      'Me.lblMsg.Caption = "Exporting record #" & lRecords & " to " &
strTemplate
      'Me.Repaint
      
      For iCol = 1 To 1 + (rst.Fields.Count - 1)
         wks.Cells(iRow, iCol) = rst.Fields(iFld)
         
         If InStr(1, rst.Fields(iFld).Name, "Date") > 0 Then
            wks.Cells(iRow, iCol).NumberFormat = "mm/dd/yyyy"
         End If
         
         wks.Cells(iRow, iCol).WrapText = True
         iFld = iFld + 1
      Next
      
      wks.Rows(iRow).EntireRow.AutoFit
      iRow = iRow + 1
      rst.MoveNext
   Loop
   
   'ExportRequest = "Total of " & lRecords & " rows processed."
   'Me.lblMsg.Caption = "Total of " & lRecords & " rows processed."
   Set rst = Nothing
   Set dbs = Nothing
   
StartofTab2:
   Set wks = appExcel.Worksheets(2)
   sSQL = "AAAllConsolidatedUnionBetween2Kand06"
   Set dbs = currentdb
   Set rst = dbs.OpenRecordset(sSQL, dbOpenDynaset, dbReadOnly)
   
   ' For this template, the data must be placed on the 4th row, third
column.
   ' (these values are set to constants for easy future modifications)
   iCol = 1
   iRow = 2
   If Not rst.BOF Then rst.MoveFirst
   Do Until rst.EOF
      iFld = 0
      lRecords = lRecords + 1
      'Me.lblMsg.Caption = "Exporting record #" & lRecords & " to " &
strTemplate
      'Me.Repaint
      
      For iCol = 1 To 1 + (rst.Fields.Count - 1)
         wks.Cells(iRow, iCol) = rst.Fields(iFld)
         
         If InStr(1, rst.Fields(iFld).Name, "Date") > 0 Then
            wks.Cells(iRow, iCol).NumberFormat = "mm/dd/yyyy"
         End If
         
         wks.Cells(iRow, iCol).WrapText = True
         iFld = iFld + 1
      Next
      
      wks.Rows(iRow).EntireRow.AutoFit
      iRow = iRow + 1
      rst.MoveNext
   Loop
   
   'ExportRequest = "Total of " & lRecords & " rows processed."
   'Me.lblMsg.Caption = "Total of " & lRecords & " rows processed."
   Set rst = Nothing
   Set dbs = Nothing
   
StartofTab3:
   Set wks = appExcel.Worksheets(3)
   sSQL = "AAAllConsolidatedUnionAfter06"
   Set dbs = currentdb
   Set rst = dbs.OpenRecordset(sSQL, dbOpenSnapshot)
   
   ' For this template, the data must be placed on the 4th row, third
column.
   ' (these values are set to constants for easy future modifications)
   iCol = 1
   iRow = 2
   If Not rst.BOF Then rst.MoveFirst
   Do Until rst.EOF
      iFld = 0
      lRecords = lRecords + 1
      'Me.lblMsg.Caption = "Exporting record #" & lRecords & " to " &
strTemplate
      'Me.Repaint
      
      For iCol = 1 To 1 + (rst.Fields.Count - 1)
         wks.Cells(iRow, iCol) = rst.Fields(iFld)
         
         If InStr(1, rst.Fields(iFld).Name, "Date") > 0 Then
            wks.Cells(iRow, iCol).NumberFormat = "mm/dd/yyyy"
         End If
         
         wks.Cells(iRow, iCol).WrapText = True
         iFld = iFld + 1
      Next
      
      wks.Rows(iRow).EntireRow.AutoFit
      iRow = iRow + 1
      rst.MoveNext
   Loop
   
   'ExportRequest = "Total of " & lRecords & " rows processed."
   'Me.lblMsg.Caption = "Total of " & lRecords & " rows processed."
   


exit_Here:
   ' Cleanup all objects  (resume next on errors)
   On Error Resume Next
   appExcel.SaveWorkspace (sOutput)
   Set wks = Nothing
   Set wbk = Nothing
   Set appExcel = Nothing
   Set rst = Nothing
   Set dbs = Nothing
   DoCmd.Hourglass False
   Exit Function
   
err_Handler:
   'ExportRequest = Err.Description
   'Me.lblMsg.Caption = Err.Description
   MsgBox Err.Description, vbOKOnly
   Resume exit_Here
   
End Function



More information about the AccessD mailing list