【发布时间】:2019-07-08 18:34:47
【问题描述】:
我有许多 Excel 文件,它们通过宏刷新自己,还有一个主文件来控制打开另一个文件。主文件有一个 Auto_Open 宏,可以打开每个文档,在文档中运行宏,然后关闭它。每个文档的宏本质上都会刷新里面的所有查询,并将文档保存在两个不同的地方。最重要的是,我使用 Window 的任务计划程序每两个小时打开一次主文档,开始整个过程。
这通常效果很好。但是,我偶尔会因为“找不到项目或库”的文档而收到错误消息。这似乎是随机发生的,并且每次都使用不同的文档(尽管不是主文档)。一旦出现此错误,每次我尝试打开 VBA 窗口时,Excel 都会完全崩溃。所述文档中的宏将不再通过主文件的 Auto_Open 宏运行,我必须从头开始重新创建所述文档。
我已尝试按照 Microsoft (https://docs.microsoft.com/en-us/office/vba/Language/Reference/User-Interface-Help/can-t-find-project-or-library) 的建议查找该库,但无济于事。在受影响的文件中打开 VBA 窗口会导致立即崩溃,按照上面文章中的步骤操作未受影响的文件不会发现任何问题。崩溃返回此错误文本:
问题签名:
问题事件名称:APPCRASH
应用程序名称:EXCEL.EXE
应用版本:16.0.11231.20130
应用程序时间戳:5c518be9
故障模块名称:VBE7.DLL
故障模块版本:0.0.0.0
故障模块时间戳:5c064824
异常代码:c0000005
异常偏移量:00000000000b555a
操作系统版本:6.3.9600.2.0.0.272.7
区域 ID:1033
主文件中的代码:
Sub Auto_Open()
Application.Wait (Now + TimeValue("0:00:10"))
Application.Calculation = xlCalculationManual
Workbooks.Open ("C:\Users\aowens\Desktop\Queries\ATSReports\ATSReports.xlsm")
Application.Run "'C:\Users\aowens\Desktop\Queries\ATSReports\ATSReports.xlsm'!Macro"
Workbooks("ATSReports.xlsm").Close False
Workbooks.Open ("C:\Users\aowens\Desktop\Queries\MiscLookups\MiscLookups.xlsm")
Application.Run "'C:\Users\aowens\Desktop\Queries\MiscLookups\MiscLookups.xlsm'!Macro"
Workbooks("MiscLookups.xlsm").Close False
(此模式在其他 5 个文件中重复)
文件中的示例宏:
Sub Macro()
Dim errorcount
Dim broken
Dim this As Date
this = now()
errorcount = 0
On Error Resume Next
ThisWorkbook.Connections("Query - MasterROCL").Refresh
If Err <> 0 Then
errorcount = errorcount + 1
broken = broken & " ROCL"
End If
Err = 0
ThisWorkbook.Connections("Query - MasterRMEL").Refresh
If Err <> 0 Then
errorcount = errorcount + 1
broken = broken & " RMEL"
End If
Err = 0
ThisWorkbook.Connections("Query - MasterRHIL").Refresh
If Err <> 0 Then
errorcount = errorcount + 1
broken = broken & " RHIL"
End If
Err = 0
ThisWorkbook.Connections("Query - MasterREXH").Refresh
If Err <> 0 Then
errorcount = errorcount + 1
broken = broken & " REXH"
End If
Err = 0
Calculate
ThisWorkbook.Save
Application.DisplayAlerts = False
ThisWorkbook.SaveAs ("R:\Operations\Dashboards\Queries\ATSReports.xlsm")
Dim OutApp As Object
Dim OutMail As Object
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
With OutMail
.to = "aowens@explorenetwork.org"
.Subject = errorcount & " Errors for " & Format(now(), "MM/DD HH:MM") & " ATS Refresh"
.htmlBody = " ~ " & Round(1440 * (TimeValue(now()) - TimeValue(this)), 0) & " mins. Broken:" & broken
.Send
End With
End Sub
【问题讨论】:
-
您似乎正在关闭您打开的文件,但您是否曾经关闭过
master文件?master文件在您的调度程序尝试打开它的另一个实例时是否仍然打开? -
另外,如果允许在后台刷新连接,我可以在这里看到很多事情都试图同时发生..
-
如果您遇到您忽略的错误,您并没有清除
Err对象。 TBH,Application.Run、On Error Resume Next和Auto_Open()的组合看起来就像一场等待发生的灾难,即使 你将 Window 的任务计划程序投入其中。所有这些工作簿流失的目的是什么?我无法想象没有更好的方法来解决这个问题。 -
顺便说一句,您的错误是访问冲突 - 您的一个指针落在某处的公寓边界上。这与 VBA 代码几乎没有关系,只是它与尝试使用本质上是单线程的东西同时尝试做大量事情有关。
-
stackoverflow.com/questions/54559743/… 滚动到 Greg Dobbs 的答案 - 这行得通。
标签: excel vba taskscheduler