【发布时间】:2013-12-13 04:27:08
【问题描述】:
运行 VBA 脚本的 Access DB 有一个奇怪的问题,它调用 Excel 文档以在将其用作链接表之前运行一些修复程序。
奇怪的是它在第一次从新打开的 Access 运行脚本时完美运行。 第二次我得到错误'运行时错误'9',下标超出范围' 脚本失败:
Workbooks("Overview Tracker.xlsb").Activate
在 IF THEN 子中,testProcessed() (我只输入该行以查看首先激活 Workbook 是否有帮助,但它没有 - 要么它在该行失败,要么在下一个 IF 行失败。)
脚本按此顺序运行。 1.打开excel文档 2.测试是否已经处理(检查单元格内容) 3. 如果处理完毕,则弹出一条消息并退出 Excel 文档 4.如果没有则运行处理然后退出Excel文档
正如我所说,新打开的 Access 将完美地运行此脚本,在任何一种情况下(已处理或未处理),但脚本的第二次运行总是会崩溃。
我整天都在努力解决这个问题,没有运气!
欢迎任何想法! 提前感谢您的帮助。
Public Function OpenExcelFixer1()
Dim xlApp As Excel.Application
Set xlApp = New Excel.Application
xlApp.Visible = True
xlApp.DisplayAlerts = False
xlApp.Workbooks.Open "C:\Users\....\Overview tracker.xlsb", UpdateLinks:= _
3
Call testProcessed
xlApp.Quit
End Function
Public Sub alreadyDone()
MsgBox "This file has already been processed", vbExclamation, "Overview Tracker already fixed"
Excel.Application.Quit
End Sub
Public Sub fixProcess()
ActiveWorkbook.Save
Sheets("OVERVIEW").Select
Rows("1:1").Select
Selection.Delete Shift:=xlUp
Columns("A:I").Select
Selection.NumberFormat = "@"
Columns("Q:X").Select
Selection.NumberFormat = "[$-F800]dddd, mmmm dd, yyyy"
Sheets("SHIPPING").Select
Rows("1:1").Select
Selection.Delete Shift:=xlUp
Columns("A:I").Select
Selection.NumberFormat = "@"
Columns("Q:X").Select
Selection.NumberFormat = "[$-F800]dddd, mmmm dd, yyyy"
Sheets("Dell Update").Select
Range("G1").Select
ActiveCell.FormulaR1C1 = "PROCESSED"
ActiveWorkbook.Save
ActiveWorkbook.Close
Excel.Application.Quit
End Sub
Public Sub testProcessed()
Workbooks("Overview Tracker.xlsb").Activate
If Workbooks("Overview Tracker.xlsb").Sheets("Update").Range("G1").Value = "PROCESSED" Then
Call alreadyDone
Else
Call fixProcess
End If
End Sub
【问题讨论】:
-
您确定第二次运行脚本时
Overview Tracker工作簿已打开? -
在
OpenExcelFixer1中,您正在创建一个新的 Excel 实例,然后在该实例中打开工作簿。为什么这样做?您的其他代码无权访问该新实例或在该实例中打开的工作簿,除非您传入对xlApp的引用。 -
嗨,是的,第二次确实打开了 excel 文件,我看到它打开了。
-
Tim,我不确定我是否理解,如果我不创建实例代码就不会运行?