2012-07-12 69 views
1

我需要Excel VBA(2010在Windows 7上)的一些幫助。 我想要做的是關閉Excel,然後關閉電腦。 我的代碼是:退出Excel並註銷時出錯

Declare Function ExitWindowsEx& Lib "User32" (ByVal uFlags As Long, ByVal dwReserved AS Long) 
Global Const EWX_LOGOFF = 0 
Global Const EWX_FORCE = 4 

....Main Code Here .... 

Application.DisplayAlerts = False 
Application.Quit 

Action = ExitWindows(EWX_LOGOFF or EWX_FORCE, 0) 

間歇性地出現以下錯誤:

Cannot Quit Microsoft Excel

該機還註銷,雖然,這就是我要的,所以它不是一個大問題。我只想幹淨地退出。我一直保留EWX_FORCE,因爲我不想被窗口提示。 有什麼建議嗎?

回答

0

失蹤DoEventsApplication.Quit也許?包括這個,以便Excel有足夠的時間來關閉,否則你會得到一個錯誤。順便說一句,這對我有效。

另外,如果打開了任何工作簿/工作簿,那麼最好關閉它/他們有/無保存代碼,因爲您可能會丟失數據。

Public Declare Function ExitWindowsEx Lib "user32" (ByVal dwOptions As Long, _ 
ByVal dwReserved As Long) As Long 

Public Const EWX_LogOff As Long = 0 
Public Const EWX_SHUTDOWN As Long = 1 
Public Const EWX_REBOOT As Long = 2 
Public Const EWX_FORCE As Long = 4 

Sub Sample() 
    ' 
    '~~> Main Code Here 
    ' 
    Application.DisplayAlerts = False 
    Application.Quit 

    DoEvents 

    ExitWindowsEx EWX_LogOff Or EWX_FORCE, &HFFFF 
End Sub 
+0

當我添加Do Events時,我現在沒有註銷。 – rockOn123 2012-07-13 08:26:53

+0

上面的代碼已經過測試和測試:)如果你沒有註銷,那麼有些東西會阻止系統註銷。因此,當您嘗試強制註銷時,您遇到了錯誤。 'DoEvents'給窗口時間來完成它在註銷之前所做的任何事情。發出上述命令時,您還可以檢查CPU活動。 – 2012-07-13 11:51:31

+0

當我運行這個代碼時,只要vba命中'Application.Quit'行,Excel就會關閉(如預期的那樣),因此後續的行不會被處理。唯一可以讓我工作的方法是將'Application.Quit'行註釋掉,然後'DoEvents'和'ExitWindowsEx'行被處理。我在這裏錯過了什麼? – DaveU 2015-09-29 17:57:45