2010-08-18 740 views
7

我想在用戶使用窗口右上角的x按鈕關閉表單時執行一些代碼(我在Excel電子表格它隱藏了Excel。我想在表格關閉時退出excel,或者至少再次顯示excel,以便用戶可以手動退出)在VBA中關閉表單時執行代碼(Excel 2007)

查看錶單屬性,Unload屬性不存在,我也無法弄清楚如何在表單關閉時執行一個函數。

不幸的是,在VB中編碼這不是一個選項,它必須是VBA。

我知道取消隱藏Excel或直接退出它的代碼,而不是如何將其與卸載事件綁定。

回答

0

您可以在VBA中使用Unload Me關閉表單。在這之後,請立即關閉Excel。

+1

謝謝,但這是如何讓我當用戶點擊x按鈕時執行代碼?也許我沒有明確提出問題,我現在就編輯它。 – Pixotic 2010-08-18 12:17:47

+0

哦,我看到,我(錯誤地)認爲用戶正在通過單擊窗體按鈕退出,而不是窗口上的x按鈕。 – Michael 2010-08-18 12:34:09

0

嘗試這樣的: -

Private Sub Form1_FormClosing(sender as Object, e as FormClosingEventArgs) _ 
    Handles Form1.FormClosing 

    //Code you want to execute 

End Sub 
+0

發生錯誤,指出_是無效字符。 – Pixotic 2010-08-18 12:28:55

+0

當您查看源代碼時,應該有一個FormClosing事件,您可以爲您的表單選擇。以下是一個示例鏈接: http://img385.imageshack.us/img385/3966/wat3am9.jpg – Daniel 2010-08-18 12:43:03

+1

UserForm(Excel VBA)中沒有FormClosing事件。 – Xdg 2013-04-25 09:32:57

10

一位同事是能夠在這裏爲別人

Private Sub userform_terminate() 

    'Code goes here 

End Sub 
+0

請注意,隱藏表單時也會觸發此操作。如果您只想捕捉右上角的關閉按鈕(x),請使用MRS1367的答案! – OfficialBAMM 2016-03-03 11:57:00

9

您可以使用窗體的將對QueryClose事件作爲提供答案,包括例如如下:

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) 
    If CloseMode = 0 Then 
     ' Your codes 
     ' Tip: If you want to prevent closing UserForm by Close (×) button in the right-top corner of the UserForm, just uncomment the following line: 
     ' Cancel = True 
    End If 
End Sub 

你可以al所以使用vbFormControlMenu這樣的:

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) 
    If CloseMode = vbFormControlMenu Then 
     'Your code goes here 
    End If 
End Sub 
0
Private Sub Form_Unload(Cancel As Integer) 
    Dim msgRes As VbMsgBoxResult 
    msgRes = MsgBox("Exit form ?", vbYesNo) 
    If msgRes = vbYes Then 
     'optional code 
    ElseIf msgRes = vbNo Then 
     Cancel = True 
    End If 
End Sub 
+0

目前還不清楚這是如何提供問題的答案。請闡明這個答案,指出原來的問題和你的特定解決方案。 – theMayer 2016-03-04 13:21:19

0

我能夠防止形式從收盤時的X按鈕是點擊使用如下:

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) 
    Cancel = MsgBox("Please confirm cancellation", vbOKCancel + vbQuestion) = vbCancel 
End Sub