2016-11-22 124 views
0

當我在MS Access中運行下面的代碼時,我只在第一次運行時得到下標超出範圍錯誤。如果我在錯誤上點擊確定並再次運行,那很好。如果關閉數據庫並重新打開它,我會在第一次運行時再次出現錯誤。第一次運行會導致下標超出範圍錯誤

DoCmd.OutputTo acOutputTable, "tblOutput", acFormatXLS, "Output.xls", True 
Excel.Workbooks("Output.xls").Worksheets("tblOutput").Rows("1:3").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove 'or xlFormatFromRightOrBelow 
Excel.Workbooks("Output.xls").Worksheets("tblOutput").Range("B2") = "data 1" 
Excel.Workbooks("Output.xls").Worksheets("tblOutput").Range("D2") = "data 2" 
Excel.Workbooks("Output.xls").Worksheets("tblOutput").Range("E2") = "date 3" 
Excel.Workbooks("Output.xls").Worksheets("tblOutput").Range("F2") = "data 3" 
Excel.Workbooks("Output.xls").Save 
+0

哪條線獲得誤差? –

+1

在同一代碼中,您之前是否有任何其他'DoCmd.OutputTo'行?我建議使用'DoCmd.TransferSpreadsheet'代替。 – finjo

+0

第二行,我認爲它無法識別第一次運行時的Excel工作簿。 – user2369812

回答

0

我很驚訝這個作品有史以來。 :o

Excel.Workbooks是指在您的VBA項目中引用的通用Excel類,但不是以DoCmd.OutputTo開頭的實際Excel實例。

您需要獲取實際的物體。在你的情況下,最簡單的方法是在文件上使用GetObject(),我想。

這個工作對我來說:

Sub TestOutput() 

    Dim wb As Excel.Workbook 

    DoCmd.OutputTo acOutputTable, "tblOutput", acFormatXLS, "D:\Output.xls", True 
    Set wb = GetObject("D:\Output.xls") 

    wb.Worksheets("tblOutput").Rows("1:3").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove 

End Sub