专栏名称: 完美Excel
Excel与VBA技术学习与实践
目录
相关文章推荐
完美Excel  ·  VBA:创建可调整大小的用户窗体 ·  2 天前  
完美Excel  ·  奔流不息的大渡河 ·  4 天前  
Excel之家ExcelHome  ·  我写的Excel公式,不能让你随便改 ·  4 天前  
Excel之家ExcelHome  ·  频数计算很简单,搬砖搬到六十三 ·  5 天前  
完美Excel  ·  创建切换控件效果 ·  1 周前  
51好读  ›  专栏  ›  完美Excel

使用VBA移除用户窗体标题栏

完美Excel  · 公众号  · Excel  · 2024-09-03 05:33

正文

学习Excel技术,关注微信公众号:
excelperfect

标签:VBA用户窗体Windows API

有时候,删除用户窗体标题栏很有用。例如,在启动应用程序时显示所谓的“启动画面”或显示进度条效果的用户窗体时,在这些情况下,使用没有标题栏的用户窗体会更好。

1
默认情况下,VBA用户窗体没有删除标题栏的选项,但可以使用Windows API实现。在VBE中,插入一个标准模块,输入下面的代码:

Private Const GWL_STYLE = -16Private Const WS_CAPTION = &HC00000#If VBA7 Then  Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As StringAs LongPtr  #If Win64 Then    Private Declare PtrSafe Function GetWindowLong Lib "user32" Alias "GetWindowLongPtrA" (ByVal hWnd As LongPtr, ByVal nIndex As LongAs LongPtr    Private Declare PtrSafe Function SetWindowLong Lib "user32" Alias "SetWindowLongPtrA" (ByVal hWnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As LongPtr) As LongPtr  #Else    Private Declare PtrSafe Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As LongPtr, ByVal nIndex As LongAs LongPtr    Private Declare PtrSafe Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As LongPtr) As LongPtr  #End If  Private Declare PtrSafe Function DrawMenuBar Lib "user32" (ByVal hWnd As LongPtr) As Long#Else  Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As StringAs Long  Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As LongAs Long  Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As LongAs Long  Private Declare Function DrawMenuBar Lib "user32" (ByVal hWnd As LongAs Long#End If
Public Sub HideFormTitleBar(frm As Object) #If VBA7 Then  Dim lStyle As LongPtr, lFrmHandle As LongPtr #Else Dim lStyle As Long, lFrmHandle As Long #End If  lFrmHandle = FindWindow("ThunderDFrame", frm.Caption)  lStyle = GetWindowLong(lFrmHandle, GWL_STYLE) lStyle = lStyle And Not WS_CAPTION SetWindowLong lFrmHandle, GWL_STYLE, lStyle DrawMenuBar lFrmHandleEnd Sub

然后,在用户窗体代码模块中,放置下面的代码:

Private Sub UserForm_Initialize() HideFormTitleBar MeEnd Sub

示例应用

如前所述,这可用于启动画面。在VBE中插入一个用户窗体,将其重命名为frmSplash,在其中放置应在启动画面上显示的内容,例如应用程序的徽标和名称。

ThisWorkbook代码模块中,输入下面的代码:

Private Sub Workbook_Open() ActiveWindow.Visible = False frmSplash.Show Windows(ThisWorkbook.Name).Visible = TrueEnd Sub

这将在启动工作簿时显示这个用户窗体。

在该用户窗体代码模块中,输入下面的代码:

Private Sub UserForm_Activate() Application.Wait (Now + TimeValue("00:00:05")) Unload MeEnd Sub

这将使该用户窗体在显示5秒后消失。

这样,当你启动工作簿后,该用户窗体会出现在屏幕上并在5秒后自动关闭。

注:本文整理自worksheetsvba.com,供有兴趣的朋友参考。


欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。
欢迎到知识星球:完美Excel社群,进行技术交流和提问,获取更多电子资料,并通过社群加入专门的微信讨论群,更方便交流。

推荐文章
完美Excel  ·  VBA:创建可调整大小的用户窗体
2 天前
完美Excel  ·  奔流不息的大渡河
4 天前
Excel之家ExcelHome  ·  我写的Excel公式,不能让你随便改
4 天前
Excel之家ExcelHome  ·  频数计算很简单,搬砖搬到六十三
5 天前
完美Excel  ·  创建切换控件效果
1 周前
港剧剧透社  ·  《致命复活》谁是主脑:万绮雯自杀?
7 年前
科技每日推送  ·  2017年手机大涨价,真相竟是这样!
7 年前