Solved

Export 5 Access Tables to 1 Excel File using VBA

Posted on 2011-09-23
7
368 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
How to improve team productivity

Quip adds documents, spreadsheets, and tasklists to your Slack experience
- Elevate ideas to Quip docs
- Share Quip docs in Slack
- Get notified of changes to your docs
- Available on iOS/Android/Desktop/Web
- Online/Offline

 

Author Comment

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

Accepted Solution

by:
Rey Obrero 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

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

Suggested Solutions

Title # Comments Views Activity
onOpen 14 41
Index/Match with Multiple Criteria 2 15
MIN, using ARRAY 4 16
Help with SQl and UNION 7 10
In a multiple monitor setup, if you don't want to use AutoCenter to position your popup forms, you have a problem: where will they appear?  Sometimes you may have an additional problem: where the devil did they go?  If you last had a popup form open…
This code takes an Excel list of URL’s and adds a header titled “URL List”. It then searches through all URL’s in column “A”, looking for duplicates. When a duplicate is found, it is moved to the top of the list. The duplicate URL’s are then highlig…
This Micro Tutorial demonstrates how to create Excel charts: column, area, line, bar, and scatter charts. Formatting tips are provided as well.
This Micro Tutorial demonstrate the bugs in Microsoft Excel for Mac with Pivot Charts.

705 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

Need Help in Real-Time?

Connect with top rated Experts

18 Experts available now in Live!

Get 1:1 Help Now