Solved

Export 5 Access Tables to 1 Excel File using VBA

Posted on 2011-09-23
7
374 Views
Last Modified: 2012-05-12
Hello,

I am using code that I found on EE and it is working so far.  However it works for 1 export to 1 file ratio.  I need to export 5 tables from one Access file to one Excel file.  Each table export would have its own tab in the Excel File.

Possible?

Sub Export_Data()
Dim rst As DAO.Recordset
Dim xlApp As Object
Dim xlWB As Object
Dim xlWs As Object
Dim xlRng As Object
Dim strTblName As String
Dim strXLFileName As String
Dim I As Long
     
    strTblName = "YAV_FORECAST"
 
    strXLFileName = "C:\VSS Excel Export\" & Month(Format(Now, "mm")) & " VSS Results"
 
    Set rst = CurrentDb.OpenRecordset(strTblName)
 
    Set xlApp = CreateObject("Excel.Application")
 
    Set xlWB = xlApp.Workbooks.Add(xlWBATWorksheet)
 
    Set xlWs = xlWB.Worksheets(1)
 
    Set xlRng = xlWs.Range("A1")
     
    For I = 0 To rst.Fields.Count - 1
        xlRng.Offset(, I).Value = rst.Fields(I).Name
    Next I
     
    xlRng.Offset(1).CopyFromRecordset rst
 
    rst.Close
 
    Set rst = Nothing
 
    Set xlRng = xlWs.UsedRange
 
    With xlRng
 
        .Font.Name = "Verdana"
        .Font.Size = 8
 
        With .Borders
            .ColorIndex = xlAutomatic
            .LineStyle = xlContinuous
            .Weight = xlThin
        End With
 
        With .Rows(1)
            .Font.Bold = True
            .Interior.ColorIndex = 15
        End With
 
        .WrapText = False
 
        .EntireColumn.AutoFit
 
    End With
 
    xlWB.SaveAs strXLFileName, True
 
    xlApp.Visible = True
 
    Set xlApp = Nothing
 
End Sub

Open in new window

0
Comment
Question by:pwdells
  • 5
7 Comments
 

Author Comment

by:pwdells
ID: 36589467
Side Note:

I don't mind setting up a loop to run this code for each table that I need to export.  I just don't know where to find the syntax to export into an existing file and to make an additional tab for exporting/importing.
0
 
LVL 2

Expert Comment

by:sanofi-aventis
ID: 36589553
This might work. A simple Next loop with a CHOOSE function. Also add these references to your project would help you a lot. I changed all the "as Object" references. You lose all the intelisense if you use "as Object"

Sub Export_Data()

Dim rst             As ADODB.Recordset
Dim xlApp           As Excel.Application
Dim xlWB            As Excel.Workbook
Dim xlWs            As Excel.Worksheet
Dim xlRng           As Excel.Range

Dim strTblName      As String
Dim strXLFileName   As String
Dim intX            As Integer
     
    strTblName = "YAV_FORECAST"
 
    strXLFileName = "C:\VSS Excel Export\" & Month(Format(Now, "mm")) & " VSS Results"
 
    For intX = 1 To 5
   
        Set rst = CurrentProject.OpenRecordset(Choose(intX, "Table1", "Table2", "Table3", "Table4", "Table5"))
 
        Set xlApp = New Excel.Application
 
        If xlApp.Workbooks.Count < intX Then
            Set xlWB = xlApp.Workbooks.Add(xlWBATWorksheet)
        Else
            Set xlWB = xlApp.Workbooks(intX)
        End If
 
        Set xlRng = xlWs.Range("A1")
     
        For I = 0 To rst.Fields.Count - 1
            xlRng.Offset(, I).Value = rst.Fields(I).Name
        Next I
     
        xlRng.Offset(1).CopyFromRecordset rst
 
        rst.Close
 
        Set rst = Nothing
 
        Set xlRng = xlWs.UsedRange
 
        With xlRng
 
            .Font.Name = "Verdana"
            .Font.Size = 8
 
            With .Borders
                .ColorIndex = xlAutomatic
                .LineStyle = xlContinuous
                .Weight = xlThin
            End With
 
            With .Rows(1)
                .Font.Bold = True
                .Interior.ColorIndex = 15
            End With
 
            .WrapText = False
 
            .EntireColumn.AutoFit
 
        End With
       
    Next intX
 
    xlWB.SaveAs strXLFileName, True
 
    xlApp.Visible = True
 
    Set xlApp = Nothing
 
End Sub

T-Bone

Experts-Exchange.bmp
0
 

Author Comment

by:pwdells
ID: 36589735
Hi T-Bone,

I filled in the Choose() Statement as follows:

 Set rst = CurrentProject.OpenRecordset(Choose(intX, "S786", "YAV_FORECAST", "YSOC_CONSOLIDATE"))

Open in new window


I get an error:

Object doesn't support this property or method (Error 438).  The explanation is quite vague.  Have you seen this happen before with the Choose()?

Wendee
0
Simplifying Server Workload Migrations

This use case outlines the migration challenges that organizations face and how the Acronis AnyData Engine supports physical-to-physical (P2P), physical-to-virtual (P2V), virtual to physical (V2P), and cross-virtual (V2V) migration scenarios to address these challenges.

 

Author Comment

by:pwdells
ID: 36589762
P.S.  That Choose() fx is pretty nifty...if I can get it working! :0)
0
 
LVL 120

Accepted Solution

by:
Rey Obrero (Capricorn1) earned 500 total points
ID: 36589770


you can  use this format

DoCmd.TransferSpreadsheet acExport, , "table1", "c:\Myexcel.xls",true, "table1"

DoCmd.TransferSpreadsheet acExport, , "table2", "c:\Myexcel.xls",true, "table2"

DoCmd.TransferSpreadsheet acExport, , "table3", "c:\Myexcel.xls",true, "table3"

DoCmd.TransferSpreadsheet acExport, , "table4", "c:\Myexcel.xls",true, "table4"

DoCmd.TransferSpreadsheet acExport, , "table5", "c:\Myexcel.xls",true, "table5"




0
 

Assisted Solution

by:pwdells
pwdells earned 0 total points
ID: 36589874
My End Result that is working:

Private Sub Export_Data()

Dim rs_Export       As DAO.Recordset
Dim str_Export      As String
Dim db              As DAO.Database
Dim ex_ct           As Integer
Dim i               As Integer
Dim str_Table       As String
Dim str_Month       As String
Dim str_FileName    As String

Set db = CurrentDb

str_Export = _
    "SELECT tbx_Export.Table, tbx_Export.Order, tbx_Export.Active " & _
    "FROM tbx_Export " & _
    "WHERE tbx_Export.Active = -1 " & _
    "ORDER BY tbx_Export.Order "
Set rs_Export = db.OpenRecordset(str_Export)

rs_Export.MoveLast
ex_ct = rs_Export.RecordCount
rs_Export.MoveFirst

For i = 1 To ex_ct
    str_Table = rs_Export.Fields(0)
    
    str_Month = MonthName(Month(Now()), True)
    
    str_FileName = "C:\VSS Excel Export\VSS Run - " & str_Month
    
    DoCmd.TransferSpreadsheet acExport, , str_Table, str_FileName, True, str_Table
    rs_Export.MoveNext
Next i


End Sub

Open in new window

0
 

Author Closing Comment

by:pwdells
ID: 36715412
I wanted to keep this dynamic, because the names of the tables to be exported are coming from a table.  So this had to be in a loop to be able to work dynamically from a recordset.

But Cap had a real cut and dry answer.
0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Describes a method of obtaining an object variable to an already running instance of Microsoft Access so that it can be controlled via automation.
Some code to ensure data integrity when using macros within Excel. Also included code that helps secure your data within an Excel workbook.
This Micro Tutorial will demonstrate on a Mac how to change the sort order for chart legend values and decrpyt the intimidating chart menu.
Polish reports in Access so they look terrific. Take yourself to another level. Equations, Back Color, Alternate Back Color. Write easy VBA Code. Tighten space to use less pages. Launch report from a menu, considering criteria only when it is filled…

713 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question