文章背景:用户窗体是Excel中的UserForm对象。在使用UserForm时,曾经目前遇到过两个问题。
关闭
按钮。双击UserForm1窗体,进入代码编辑界面,输入如下代码:
Option Explicit
'用于窗体最大最小化按钮的设置
'参考资源:https://blog.csdn.net/u010280075/article/details/84888744
Private Declare PtrSafe Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare PtrSafe Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Const GWL_STYLE = (-16)
Private Const WS_THICKFRAME As Long = &H40000 '(恢复大小)
Private Const WS_MINIMIZEBOX As Long = &H20000 '(最小化)
Private Const WS_MAXIMIZEBOX As Long = &H10000 '(最大化)
Private Sub UserForm_Initialize()
'窗体添加最大最小化按钮
Dim hWndForm As Long
Dim IStyle As Long
hWndForm = FindWindow("ThunderDFrame", Me.Caption)
IStyle = GetWindowLong(hWndForm, GWL_STYLE)
IStyle = IStyle Or WS_THICKFRAME '还原
IStyle = IStyle Or WS_MINIMIZEBOX '最小化
IStyle = IStyle Or WS_MAXIMIZEBOX '最大化
SetWindowLong hWndForm, GWL_STYLE, IStyle
End Sub
主要涉及两大块代码,一块在模块级变量区域;一块在UserForm的初始化(Initialize)行为内部。运行UserForm窗体,得到如下结果:
可以看到,此时UserForm1中有了最大化和最小化按钮。
以一个简单的命令按钮为例。在userForm添加一个命令按钮(CommandButton1),Caption取名为最小化
。接下来同样需要在代码窗口内输入两大块代码。在模块级变量区域,也就是第一个sub过程之前,添加如下代码:
'用于最小化窗体的代码实现
'参考资料:http://club.excelhome.net/thread-878927-1-1.html
Private Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const WM_SYSCOMMAND = &H112
Private Const SC_MINIMIZE = &HF020&
在CommandButton1的点击(click)行为内部,输入如下代码:
Private Sub CommandButton1_Click()
Dim hWndForm As Long
hWndForm = FindWindow("ThunderDFrame", Me.Caption)
SendMessage hWndForm, WM_SYSCOMMAND, SC_MINIMIZE, ByVal 0& '注释:使窗体最小化
End Sub
通过点击CommandButton1按钮,可以看到,UserForm1实现了最小化,隐藏在了视窗界面的左下角。
视频演示:http://mpvideo.qpic.cn/0b78kqaaaaaawmagafrnarpvavgdabkaaaaa.f10002.mp4?
参考资料: