[英]Excel 2016 crash on API timer initiated Workbook.close
我有一個工作簿,當關閉由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
excel vba中的計時器是通過使用Application.OnTime命令或Windows計時器完成的。
請注意,為了調度函數的調用(使用上面提到的命令),它使用了APPLICATION,這意味着它告訴EXCEL執行調用,而不是工作簿。 所以,在你的情況下,工作簿是關閉的,但是所謂的程序仍然計划在將來的某個時間關閉。 您得到的錯誤是excel找不到該過程然后拋出錯誤。
它在你的情況下崩潰的原因是你使用Windows計時器來做它。 當您關閉工作簿時,您的lib32實例將丟失,並且當時間到來時,Windows無法訪問內存然后崩潰整個應用程序。
在這兩種情況下,您的預定程序似乎仍在運行。
我建議你研究一下並考慮使用application.ontime。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.