Hide close [X] button on excel vba userform for my progress bar
Below is a routine that you can call like this:
subRemoveCloseButton MyForm
or from within your form:
subRemoveCloseButton Me
Here's the code you'll need:
Private Const mcGWL_STYLE = (-16)
Private Const mcWS_SYSMENU = &H80000
'Windows API calls to handle windows
#If VBA7 Then
Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
#Else
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
#End If
#If VBA7 Then
Private Declare PtrSafe Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
#Else
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
#End If
#If VBA7 Then
Private Declare PtrSafe Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
#Else
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
#End If
Public Sub subRemoveCloseButton(frm As Object)
Dim lngStyle As Long
Dim lngHWnd As Long
lngHWnd = FindWindow(vbNullString, frm.Caption)
lngStyle = GetWindowLong(lngHWnd, mcGWL_STYLE)
If lngStyle And mcWS_SYSMENU > 0 Then
SetWindowLong lngHWnd, mcGWL_STYLE, (lngStyle And Not mcWS_SYSMENU)
End If
End Sub
You can work it out from the following snippets:
Select the cmdClose
button
On the Menu bar, choose View | Code
Where the cursor is flashing, enter the following code:
Private Sub cmdClose_Click()
Unload Me
End Sub
On the Menu bar, choose View | Object
, to return to the UserForm.
To allow users to close the form by pressing the Esc key:
Select the cmdClose button
In the Properties window, change the Cancel
property to True
To prevent users from closing the form by clicking the X button
When the UserForm
is opened, there is an X
at the top right. In addition to using the Close Form button, people will be able to close the form by using the X. If you want to prevent that, follow these steps.
Right-click on an empty part of the UserForm
Choose View | Code
From the Procedure dropdown, at the top right, choose QueryClose
Where the cursor is flashing, paste the highlighted code from the following sample
Private Sub UserForm_QueryClose(Cancel As Integer, _
CloseMode As Integer)
If CloseMode = vbFormControlMenu Then
Cancel = True
MsgBox "Please use the Close Form button!"
End If
End Sub
On the Menu bar, choose View | Object
, to return to the UserForm.
Now, if someone clicks the X
in the UserForm, they'll see your message.
from http://www.contextures.com/xlUserForm01.html