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

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

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

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

我使用“For Each”循环来通过我的访问表。 当某些表被识别时,一些其他代码运行创build新的表(代码未显示)。 一旦创build了一个新表,就会被导出为ex​​cel并进行格式化。 这是发生错误的地方。 第一个循环工作正常,在第二个循环中,代码在select列范围时发生错误。

我已经做了一些search这个错误,看起来像原因往往是如何引用工作表。 我有一些使用这种过程的工具,所以最终理解原因是很好的。

码:

 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 

编辑 – @ASH击败了我…

 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)尽可能避免使用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