2017-03-03 4 views
1

Ich habe diese Arbeitsmappe und ich möchte es wie ein Programm aussehen. Ich möchte auch, dass Benutzer die Anwendung nur über eine bestimmte Befehlsschaltfläche beenden können. HierSchließen Anwendung nur durch VBA

ist der Code Ich habe

Private Sub Workbook_BeforeClose(Cancel As Boolean) 
Application.OnKey "{ESC}" 
Cancel = True 
MsgBox "Please use the QUIT button to save and close the database." 
End Sub 

Und für die Quit-Taste:

Sub SAVE_CLOSE 
ActiveWorkbook.Save 
If Workbooks.Count < 2 Then 
Application.Quit 
Else 
ActiveWorkbook.Close 
End If 
End Sub 

Mein Problem ist, dass, wenn der Benutzer die Anwendung durch diese Schaltfläche beenden, den Private Sub löst Workbook_BeforeClose Ereignis und brechen Sie den Vorgang ab. Wie würdest du das reparieren?

Danke!

Antwort

2

Stellen Sie einfach eine Flagge in den Button-Handler und Test für ihn in der BeforeClose Veranstaltung:

In Thisworkbook ...

Public okToClose As Boolean      '<--module level. 

Private Sub Workbook_BeforeClose(Cancel As Boolean) 
    If Not okToClose Then 
     Application.OnKey "{ESC}" 
     Cancel = True 
     MsgBox "Please use the QUIT button to save and close the database." 
    End If 
End Sub 

... und im Handler ...

Sub SAVE_CLOSE() 
    ActiveWorkbook.Save 
    ThisWorkbook.okToClose = True 
    If Workbooks.Count < 2 Then 
     Application.Quit 
    Else 
     ActiveWorkbook.Close 
    End If 
End Sub 

Beachten Sie, dass Sie vermeiden sollten, ActiveWorkbook.Close aufzurufen - verwenden Sie stattdessen eine harte Referenz. Das ist ein wirklich guter Weg, um den Arbeitstag eines Menschen zu zerstören ...

+0

Oh hey, was ich tippte, aber mit Beispielen! Nett. :) – steegness

+0

Arbeiten wie ein Charme! Vielen Dank! – Alex

-1

Da Workbook_BeforeClose() immer dann aufgerufen wird, wenn die Arbeitsmappe geschlossen wird (ob es Ihre Methode ist oder nicht), benötigen Sie einen Weg innerhalb dieser Methode wisse, dass es dein Knopf war, der es nannte. Vielleicht eine globale Variable oder ein Wert in einer bestimmten Zelle auf einem ausgeblendeten Blatt?