有时候,删除用户窗体标题栏很有用。例如,在启动应用程序时显示所谓的“启动画面”或显示进度条效果的用户窗体时,在这些情况下,使用没有标题栏的用户窗体会更好。默认情况下,VBA用户窗体没有删除标题栏的选项,但可以使用Windows
API实现。在VBE中,插入一个标准模块,输入下面的代码:Private Const GWL_STYLE = -16
Private Const WS_CAPTION = &HC00000
Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
Private Declare PtrSafe Function GetWindowLong Lib "user32" Alias "GetWindowLongPtrA" (ByVal hWnd As LongPtr, ByVal nIndex As Long) As LongPtr
Private Declare PtrSafe Function SetWindowLong Lib "user32" Alias "SetWindowLongPtrA" (ByVal hWnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As LongPtr) As LongPtr
Private Declare PtrSafe Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As LongPtr, ByVal nIndex As Long) As LongPtr
Private Declare PtrSafe Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As LongPtr) As LongPtr
Private Declare PtrSafe Function DrawMenuBar Lib "user32" (ByVal hWnd As LongPtr) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
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
Public Sub HideFormTitleBar(frm As Object)
Dim lStyle As LongPtr, lFrmHandle As LongPtr
Dim lStyle As Long, lFrmHandle As Long
lFrmHandle = FindWindow("ThunderDFrame", frm.Caption)
lStyle = GetWindowLong(lFrmHandle, GWL_STYLE)
lStyle = lStyle And Not WS_CAPTION
SetWindowLong lFrmHandle, GWL_STYLE, lStyle
DrawMenuBar lFrmHandle
End Sub
Private Sub UserForm_Initialize()
HideFormTitleBar Me
End Sub
如前所述,这可用于启动画面。在VBE中插入一个用户窗体,将其重命名为frmSplash,在其中放置应在启动画面上显示的内容,例如应用程序的徽标和名称。在ThisWorkbook代码模块中,输入下面的代码:Private Sub Workbook_Open()
ActiveWindow.Visible = False
frmSplash.Show
Windows(ThisWorkbook.Name).Visible = True
End Sub
Private Sub UserForm_Activate()
Application.Wait (Now + TimeValue("00:00:05"))
Unload Me
End Sub
这样,当你启动工作簿后,该用户窗体会出现在屏幕上并在5秒后自动关闭。注:本文整理自worksheetsvba.com,供有兴趣的朋友参考。欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。
欢迎到知识星球:完美Excel社群,进行技术交流和提问,获取更多电子资料,并通过社群加入专门的微信讨论群,更方便交流。