2012-07-12 3 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

기계는 아직도 나는 그것이 큰 문제가 아니다 그래서 원하는이다, 그러나 로그 오프합니다. 나는 그냥 깔끔하게 나가고 싶다. Windows에서 메시지를 표시하지 않으려면 EWX_FORCE를 유지했습니다. 제안 사항이 있으십니까?

답변

0

Application.Quit 이후에 DoEvents이 누락 되었습니까? 엑셀이 닫을 수있는 시간을 충분히 확보하면 오류가 발생합니다. BTW이 나를 위해 일했다.

또한 통합 문서/통합 문서가 열려 있으면 데이터가 손실 될 수 있으므로 코드를 저장하거나 저장하지 않고 닫는 것이 좋습니다.

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

내가 할 일을 추가하면 이제 로그 오프되지 않습니다. – rockOn123

+0

위의 코드를 시도하고 테스트했습니다 :) 로그 오프하지 않으면 시스템이 로그 오프하지 못하게하는 무언가가 있습니다. 따라서 로그 오프를 시도 할 때 오류가 발생했습니다. 'DoEvents'는 로그 오프하기 전에 무엇을하고 있어도 완료 할 시간을줍니다. 위의 명령을 실행할 때 CPU 활동을 확인할 수도 있습니다. –

+0

이 코드를 실행하면 vba가'Application.Quit' 라인에 도달하자마자 Excel이 종료되어 (결과적으로) 후속 라인이 처리되지 않습니다. 이 기능을 사용할 수있는 유일한 방법은'Application.Quit' 라인을 주석 처리하고'DoEvents'와'ExitWindowsEx' 라인을 처리하는 것입니다. 내가 여기서 무엇을 놓치고 있니? – DaveU