API 2016计时器启动Workbook.close时发生Excel 2016崩溃

当一个API定时器触发closures时,我有一个工作簿在closures时崩溃了Excel。

编辑:下面的链接中的工作簿除了计时器和退出模块没有什么,它具有相同的行为,所以它不是内容的问题。

https://www.dropbox.com/s/x0xdwgj5h34ctdk/Book1.xlsm?dl=0

工作簿closuresExcel崩溃几秒钟后。 我已经尝试closures定时器,取消隐藏所有表单,卸载表单…所有对象都设置为Nothing

我正在做的就是Workbooks(ThisWorkbook.Name).Close SaveChanges:=True ?? !!

从UserForm调用相同的子没有问题。 工作簿closures,而没有Excel崩溃。

如何解决这个问题?

 Sub ApplicationExit() ' Call UnloadAllForms ' DoEvents ' Sleep 1000 ' Call StopCloseTimer 'DoEvents 'If Application.Workbooks.Count = 1 Then ' Workbooks(ThisWorkbook.Name).Save ' Application.Quit 'Else DoEvents Workbooks(ThisWorkbook.Name).Close SaveChanges:=True 'End If End Sub 

定时器触发的代码是;

 Sub TimerCalled() If CloseTimerValue = "" Then Call Reset_CloseTimerValue DoEvents If basTimers.CloseTimerValue <= Now() And Not Unlocked Then Call ApplicationExit On Error Resume Next 'In case sheet is protected ThisWorkbook.Sheets("JobIndex").Range("CloseCount").Value = Format(Now() - CloseTimerValue, "hh:m:s") End Sub 

用户表示说;

 CloseUp: i = MsgBox("Close Project Register?", vbYesNo, MsgBoxTitle) Select Case i Case vbYes Call ApplicationExit Case vbNo Workbooks(ThisWorkbook.Name).Save End Select 

计时器在Excel VBA是通过使用Application.OnTime命令或Windows计时器完成的,因为您正在使用。

注意,为了安排一个函数的调用(使用上面提到的命令),它使用了APPLICATION,这意味着它告诉EXCEL执行调用,而不是你的工作簿。 所以,就你的情况而言,工作簿是closures的,但是即将被调用的程序仍然计划在未来的某个时间点closures。 你得到的错误是,Excel没有find过程,然后抛出一个错误。

它在你的情况崩溃的原因是,你正在使用Windows计时器来做到这一点。 closures工作簿时,lib32的实例将丢失,并且到时,Windows无法访问内存,然后崩溃整个应用程序。

在这两种情况下,您的预定程序似乎仍在运行。

我build议你看看,并考虑使用application.ontime。