2017-09-04 38 views
0

我今天編輯用戶窗體時,我不小心創建了一個用戶表單無法關閉:如何在Query_Close的取消爭論總是等於True時關閉用戶窗體?

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) 
    ' Logic that always evaluated to: 
    Cancel = True 
End Sub 

ShowModal屬性設置爲True,所以你不能用Excel或VBE所以它的交互看似不可能殺死這個表格。無論CloseMode(例如,Alt-F4)如何,邏輯總是評估爲Cancel = True。最終的解決方案是保存工作簿並使用任務管理器來結束Excel。這工作,因爲所有的信息都被正確保存,但這是一個相當骯髒的解決方案,我寧願避免。

這些問題:

處理不當關閉這會導致一些錯誤的地方仍然存在的工作簿。

有沒有一種方法來關閉用戶表單(已加載)時Cancel總是在Query_Close事件等於True

+0

簡答:不,這是取消屬性的​​用途。程序員需要適當地啓用一種方法來關閉表單。 – jkpieterse

+0

將取消設置爲零 - 請參閱https://msdn.microsoft.com/VBA/Language-Reference-VBA/articles/queryclose-event – Absinthe

回答

1

當你打開編輯器時,你仍然可以停止代碼,編輯時應該總是這樣。除此之外,您可以從任務欄關閉excel,右鍵單擊它時,如果您進行了更改,則會顯示保存提示,您可以取消該表單並且表單將消失。
但編程明智不是。這些形式不應該被創建。

+0

我不敢相信我從來沒有想過只是停止代碼。用任務欄關閉工作簿不會提示保存並關閉VBE。無論如何,Ctrl + Break暫停,然後停止代碼完美工作。 – TheFizh

+0

您也可以在該行上放置一個斷點,然後在需要時將其編輯爲False。 – Rory

0

您的表單應該在右上角有一個紅色的X,您可以按下以關閉表單。如果你沒有這樣的按鈕創建表單,它應該有一個命令按鈕,你可以點擊運行一個過程。該程序應該包含行Me.Hide。這將關閉表格,但它將保留在內存中,並可通過Show命令進行調用。 您不應在表單自己的代碼中使用Unload命令。該命令應放置在打開表單的代碼中。順序是你創建表單,然後顯示它,隱藏並最終卸載它。在ShowHide之間進行控制。

相關問題