通过Access VBA格式化Excel - 范围应用程序/对象定义的错误

时间:2015-10-27 21:48:02

标签: excel vba excel-vba access-vba range

我的问题发生在以下一行:

Worksheets(1).Range("A:A").Select

背景:我有一个加载文本文件的过程,将其拆分成许多其他表,然后将这些部分中的一些作为新表一起导出,将它们导出为ex​​cel,并进行一些格式化。

我使用'For Each'循环遍历我的访问表。当识别出某些表时,会运行一些其他代码来创建新表(代码未显示)。创建新表后,将导出到excel并进行格式化。这是发生错误的地方。第一个循环工作正常,在第二个循环中,代码在选择列范围时会出错。

我已经对此错误进行了一些搜索,看起来原因通常是如何引用工作表。我有很多使用这种过程的工具,所以最终了解原因会很棒。

代码:

Dim xl                           As Excel.Application
Dim xlBook                       As Excel.Workbook
Dim xlSheet1                     As Excel.Worksheet

outputFileName = "C:\Users\UserID\Desktop\Reports\" & tblData & ".xls"
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "tbl_Report",     outputFileName, True

Set xl = New Excel.Application
Set xlBook = xl.Workbooks.Open(outputFileName)
xl.Visible = True

Set xlSheet1 = xlBook.Worksheets(1)

With xlSheet1
Worksheets(1).Range("A:A").Select
Selection.Delete Shift:=xlToLeft
Worksheets(1).Range("1:1").Select
Selection.Delete Shift:=xlUp

Worksheets(1).Range("A1:J1").Interior.Color = RGB(191, 191, 191)
Worksheets(1).Range("A1:J1").Borders.Weight = xlThin
Worksheets(1).Range("A1:J100").Font.Name = "Calibri (Body)"
Worksheets(1).Range("A1:J100").Font.Size = 11
Worksheets(1).Range("A1:J1").HorizontalAlignment = xlCenter
Worksheets(1).Range("A12:F12").Interior.Color = RGB(191, 191, 191)
Worksheets(1).Range("A12:F12").Borders.Weight = xlThin
Worksheets(1).Range("A12:F12").HorizontalAlignment = xlCenter
Worksheets(1).Range("A1:J100").Cells.Columns.AutoFit

xl.DisplayAlerts = False

xl.ActiveWorkbook.Save
xl.ActiveWorkbook.Close

xl.DisplayAlerts = True

Set xlSheet1 = Nothing
Set xlBook = Nothing
Set xl = Nothing

End With

2 个答案:

答案 0 :(得分:4)

编辑 - @ A.S.H。打败了我...

Dim xl As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet1 As Excel.Worksheet

outputFileName = "C:\Users\UserID\Desktop\Reports\" & tblData & ".xls"
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, _
                          "tbl_Report", outputFileName, True

Set xl = New Excel.Application
Set xlBook = xl.Workbooks.Open(outputFileName)
xl.Visible = True

Set xlSheet1 = xlBook.Worksheets(1)

With xlSheet1

    .Range("A:A").Delete Shift:=xlToLeft
    .Range("1:1").Delete Shift:=xlUp

    With .Range("A1:J1")
        .Interior.Color = RGB(191, 191, 191)
        .Borders.Weight = xlThin
        .HorizontalAlignment = xlCenter
    End with

    With .Range("A1:J100")
        .Font.Name = "Calibri (Body)"
        .Font.Size = 11
        .Cells.Columns.AutoFit
    End with

    With .Range("A12:F12")
        .Interior.Color = RGB(191, 191, 191)
        .Borders.Weight = xlThin
        .HorizontalAlignment = xlCenter
    End with


End With    

xlBook.Close True 'save changes

Set xlSheet1 = Nothing
Set xlBook = Nothing
Set xl = Nothing

答案 1 :(得分:2)

1)尽可能避免使用select。它经常失败,特别是当工作表不活动时。

2)正确使用With语句:

With xlSheet1
   .Columns("A").Delete Shift:=xlToLeft ' <~~~ you dont need select
   .Rows(1).Delete Shift:=xlUp ' <~~~ you dont need select

   .Range("A1:J1").Interior.Color = RGB(191, 191, 191)
   .Range("A1:J1").Borders.Weight = xlThin
   .Range("A1:J100").Font.Name = "Calibri (Body)"
   .Range("A1:J100").Font.Size = 11
   .Range("A1:J1").HorizontalAlignment = xlCenter
   .Range("A12:F12").Interior.Color = RGB(191, 191, 191)
   .Range("A12:F12").Borders.Weight = xlThin
   .Range("A12:F12").HorizontalAlignment = xlCenter
   .Range("A1:J100").Cells.Columns.AutoFit
End With