我有一个工作簿,当API计时器触发关闭时,它会关闭Excel。
编辑:下面链接中的工作簿只有计时器和退出模块,它具有相同的行为,因此它不是内容的问题。
https://www.dropbox.com/s/x0xdwgj5h34ctdk/Book1.xlsm?dl=0
工作簿关闭后几秒钟Excel崩溃。我试过关闭计时器,取消隐藏所有工作表,卸载表单......所有对象都设置为Nothing
。
我所做的只是Workbooks(ThisWorkbook.Name).Close SaveChanges:=True
?? !!
从UserForm调用同一个子没有问题。在没有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
答案 0 :(得分:0)
excel vba中的计时器是使用Application.OnTime命令或Windows计时器完成的。
请注意,为了安排函数调用(使用上面提到的命令),它使用了APPLICATION,这意味着它告诉EXCEL执行调用,而不是工作簿。所以,在你的情况下,工作簿是关闭的,但是所谓的程序仍然计划在将来的某个时间关闭。您得到的错误是excel没有找到该过程然后抛出错误。
在你的情况下它崩溃的原因是你使用Windows计时器来做它。当您关闭工作簿时,您的lib32实例将丢失,并且当时间到来时,Windows无法访问内存,然后崩溃整个应用程序。
在这两种情况下,您的预定程序似乎仍在运行。
我建议你研究一下并考虑使用application.ontime。