If you want to prevent the user from closing a form by using Alt+F4 or by clicking on the “X” button in the upper-right corner you just need to write some code in the form’s QueryUnload event procedure:
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) If UnloadMode = vbFormControlMenu Then Cancel = TrueEnd Sub
However, if you want to give the user a visual clue that the she can’t manually close the form, you can programmatically remove the Close command from the form’s system menu. This action indirectly grays the “X” button and disables the Alt+F4 key. Here is the code that does the trick:
Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, _ ByVal nPosition As Long, ByVal wFlags As Long) As LongPrivate Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As _ LongPrivate Declare Function GetSystemMenu Lib "user32" (ByVal hWnd As Long, _ ByVal bRevert As Long) As LongPrivate Const MF_BYPOSITION = &H400&Private Const MF_REMOVE = &H1000&Private Sub Form_Load() Dim hMenu As Long Dim itemCount As Long ' get the handle of the system menu hMenu = GetSystemMenu(Me.hWnd, 0) ' get the number of items in the menu itemCount = GetMenuItemCount(hMenu) 'remove the system menu Close menu item RemoveMenu hMenu, itemCount - 1, MF_REMOVE Or MF_BYPOSITION 'remove the system menu separator line RemoveMenu hMenu, itemCount - 2, MF_REMOVE Or MF_BYPOSITIONEnd Sub