Error formatting Excel spreadsheet from VBA

Posted on 2009-07-15
Last Modified: 2012-05-07
Hi!  I have a query in MSAccess that I am using TransferSpreadsheet to export to Excel.  I have a module to format the Excel file once it is exported.  Sometimes the file is exported and formatted correctly and other times I receive an error:  Subscript Out of Range.  
I attached the code from the module but it seems that the error is coming from Excel.  Is it possible that the data being exported is causing the problem?  It seems to happen more often when replacing an existing file with the same name rather than generating a new file.  
Could this be related to an existing RESUME.xlw file when trying to export another file?  

Sub ModifyExcelFile(vRptName As String, vHeader As String, vWorksheet As String, vTabName As String)

On Error GoTo Err_ModifyExcelFile

    Dim excelapp As Object

    Dim excelwb As Workbook

    Dim excelws As Worksheet

    'Open the XLS file with the Workbook from Application, not directly from Application.

    Set excelapp = New Excel.Application

    Set excelwb = excelapp.Workbooks.Open(vRptName)

    Set excelws = excelwb.Worksheets(vWorksheet)



            excelws.Application.Selection.Font.Bold = True



            excelws.PageSetup.Orientation = xlLandscape

            excelws.PageSetup.CenterHeader = vHeader

            excelws.PageSetup.LeftHeader = "Generated on: " & Now()

            excelws.PageSetup.CenterFooter = "Page &P"

            excelws.Name = vTabName


            excelws.Application.Selection.Font.Name = "Tahoma"

            excelws.Application.Selection.Font.Size = 10



    'Save the file so the prompt asking to save the file will not pop up



    'Need to quit the application or the file will be kept opened in memory



    'Freeing the objects

    Set excelws = Nothing

    Set excelwb = Nothing

    Set excelapp = Nothing


   MsgBox "Report exported to " & vRptName



    Exit Sub


    MsgBox Err.Description


    'Need to quit the application or the file will be kept opened in memory



    'Freeing the objects

    Set excelws = Nothing

    Set excelwb = Nothing

    Set excelapp = Nothing

    Resume Exit_ModifyExcelFile


End Sub

Open in new window

Question by:jkoneil
  • 3
LVL 13

Accepted Solution

Brian Withun earned 500 total points
ID: 24862385
My theory is that this line is causing it:

Set excelws = excelwb.Worksheets(vWorksheet)

There are very few statements which involve a "subscript".
It could be that vWorksheet has a value which does not correspond to an actual sheet name in Excel.
Step through this procedure in the debugger to confirm.
LVL 119

Expert Comment

by:Rey Obrero
ID: 24862529
first open the the excel file you used for the variable (vRptName)
then, look for the name of the sheet that you use for the variable (vWorksheet) if it exist in the Excel file.

Author Comment

ID: 24862803
I stepped through the procedure in MS Access and the file was exported successfully 2 times and one time it issued the error and it was on the Set excelws = excelwb.Worksheets(vWorksheet) line.    When I open the export that had the error, everything looks correct.


Author Comment

ID: 24896454
I tried replacing Set excelws = excelwb.Worksheets(vWorksheet) with Set excelws = excelwb.Worksheets(1) and that seems to have fixed the problem.

Author Closing Comment

ID: 31603884
Thanks for pointing me in the right direction.  I couldn't figure out what was causing the error.  I thought it might be the data that was exported.

Featured Post

Complete VMware vSphere® ESX(i) & Hyper-V Backup

Capture your entire system, including the host, with patented disk imaging integrated with VMware VADP / Microsoft VSS and RCT. RTOs is as low as 15 seconds with Acronis Active Restore™. You can enjoy unlimited P2V/V2V migrations from any source (even from a different hypervisor)

Question has a verified solution.

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

When you are entering numbers in a speadsheet, and don't remember what 6×7 is, you just type “=6*7" instead. It works in every cell! This is not so in Access. To enter the elusive 42 in a text box, you have to find a calculator, and then copy the re…
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…
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…
Many functions in Excel can make decisions. The most simple of these is the IF function: it returns a value depending on whether a condition you describe is true or false. Once you get the hang of using the IF function, you will find it easier to us…

863 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

26 Experts available now in Live!

Get 1:1 Help Now