簡體   English   中英

API計時器啟動的Workbook.close上的Excel 2016崩潰

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM