我的目标:让中国的大学生走出校门的那一刻就已经具备这些office技能,让职场人士能高效使用office为其服务。支持我,也为自己加油!
还有关不掉的窗体?
先来看下效果:
通过上图,大家很容易看出二者之间的区别,有些情况下,我们需要这种窗体,比如网页中弹出的广告,没有关闭按钮,用户无法关闭。那怎么创建一个无标题栏的窗体呢?Excel本身并没有提供一种直接的方法来显示无标题栏的用户窗体,只能借助于API函数实现。上述案例中无标题栏窗体的创建方法如下:一、在VBE中添加窗体,插入一个Label,Caption属性按图中进行修改。这里有一个问题,在Label中输入文字后需要断行怎么断?按Ctrl+Enter。二、双击窗体,在窗体中输入如下代码:#If VBA7 And Win64 Then Private Declare PtrSafe Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) 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 Declare PtrSafe Function DrawMenuBar Lib "user32" (ByVal hWnd As Long) As Long Private Declare PtrSafe Function FindWindowA Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long#Else Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Private Declare Function DrawMenuBar Lib "user32" (ByVal hWnd As Long) As Long Private Declare Function FindWindowA Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long#End IfConst GWL_STYLE = -16Const WS_CAPTION = &HC00000Private Sub UserForm_Initialize() Dim lngWindow As Long, lFrmHdl As Long lFrmHdl = FindWindowA(vbNullString, Me.Caption) lngWindow = GetWindowLong(lFrmHdl, GWL_STYLE) lngWindow = lngWindow And Not WS_CAPTION Call SetWindowLong(lFrmHdl, GWL_STYLE, lngWindow) Call DrawMenuBar(lFrmHdl)End Sub
向左滑动可以查看完整代码
看着很复杂,难在对四个API函数的理解上,梳理下,其实也没那么复杂。整段代码分两部分,第一部分,因为要使用API函数,所以要进行声明,因为涉及到32位和64的office版本,所以声明时用#If VBA7 And Win64 Then#Else#End If的结构。64位的Excel中相比32位的Excel声明API函数就多了一个关键字PtrSafe,其它的都一样,而每个API函数的声明在网上都可以查到,所以这些没必要记,只要知道哪个API函数可以干什么事情就可以了。Sub过程部分,在窗体初始化时,首先要FindWindowA函数获取到这个窗体的句柄。关于句柄(handle),大家可以百度,简单理解的话就是每打开一个窗口,系统就会给该窗口分配一个句柄,系统想要对这个窗口做出响应是要通过该句柄进行的。就像公司给每个员工分配一个工号道理差不多。获取到该窗体的句柄后,通过GetWindowLong函数获取到该窗口的信息,GWL_STYLE为该函数的第二个参数的一个常量,表示要获取的窗口样式。lngWindow = lngWindow And Not WS_CAPTION表示从获取到的窗口样式中除去WS_CAPTION(窗体的标题),即lngWindow代表的样式为无标题样式。然后用SetWindowLong函数为窗口重新设置信息,然后用DrawMenuBar函数重画窗口。以上便是无标题窗口的创建方法。本节的分享就到这里,鹏哥祝大家每天都有进步。
聚米为谷
博学宏才
更多学习内容
手机端请扫描
电脑端请登录
www.mihong.top
您点的每个赞,我都认真当成了喜欢