2015-10-27 26 views
1

在下一行出現我的問題:格式的Excel通過Access VBA - 應用範圍/對象定義的錯誤

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

背景:我有一個加載一個文本文件,將其分割成無數的其他表,然後一個過程將這些作品中的一些作爲新表格彙集在一起​​,將它們導出爲ex​​cel,並進行一些格式化。

我使用'For Each'循環來檢查我的訪問表。當某些表被識別時,一些其他代碼運行創建新表(代碼未顯示)。一旦創建了新表格,就會將其導出爲ex​​cel並進行格式化。這是發生錯誤的地方。第一個循環工作正常,在第二個循環中,代碼在選擇列範圍時出錯。

我已經做了一些搜索這個錯誤,它看起來像原因往往是如何引用工作表。我有很多使用這種過程的工具,所以最終了解原因會很好。

代碼:

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 

回答

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 
+0

有一次@Tim,lol:P –

2

1)避免使用選擇時,您可以。它經常失敗,特別是當紙張不活躍..

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 
+0

謝謝你,它現在正在工作。那麼是由SELECT引起的錯誤? –

+0

@makéman關於「選擇」方法,在SO上發生了很多討論。幾乎一致*認爲它必須儘可能避免在VBA代碼中,因爲它失敗的原因很多(最常見的是包含你想選擇範圍的工作表不活躍)。此外,直接在範圍內工作時代碼速度更快,無需選擇:) –

+0

我猜想我們使用'Select'看到的大部分代碼都是由宏記錄器以某種方式派生出來的,但即使如此,編輯代碼並刪除使用此方法.. –

相關問題