2016-11-22 123 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