首页officeexcel正文

Excel VBA 窗体之工具栏式窗体(小标题窗体)实现代码

强国说学习2023-04-2088ExcelVBA窗体工具栏式小标题实现代码

在 VBE 编辑器中,我们能看到很多的小标题栏窗体,这就是工具栏窗体,其实我们通过对VBA用户窗体的定制,也可以使VBA的用户窗体成为工具栏式窗体。本文就是运用API函数来定制 Office 中的用户窗体,使其成为工具栏窗体。

附件下载:

点击链接从百度网盘下载操作如下:◾在Excel 的VBE窗口中插入一个用户窗体,将其命名为 frmTools。在用户窗体中添加两个按钮,然后再添加一个模块。在窗体和模块中添加后面所列代码。◾在工作薄中的任意工作表中添加一窗体按钮控件,将指定其 设置宏 为 btnToolsForm_Click。其供示范之用.具体代码:

"ModToolsForm" 模块代码

Sub btnToolsForm_Click()frmTools.ShowEnd Sub

"frmTools" 窗体代码

Option Explicit'***************************************'---此模块演示了一个工具栏窗体---'***************************************'以下声明API函数#If Win64 Then '64位Private Declare PtrSafe Function FindWindow _Lib "user32" _Alias "FindWindowA" ( _ByVal lpClassName As String, _ByVal lpWindowName As String) _As LongPtrPrivate Declare PtrSafe Function GetWindowLongPtr _Lib "user32" _Alias "GetWindowLongPtrA" ( _ByVal hwnd As LongPtr, _ByVal nIndex As Long) _As LongPtrPrivate Declare PtrSafe Function SetWindowLongPtr _Lib "user32" _Alias "SetWindowLongPtrA" ( _ByVal hwnd As LongPtr, _ByVal nIndex As Long, _ByVal dwNewLong As LongPtr) _As LongPtrPrivate Declare PtrSafe Function DrawMenuBar _Lib "user32" ( _ByVal hwnd As LongPtr) _As Long#Else '32位'查找窗口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#End If#If Win64 Then '64位Private FHwnd As LongPtrPrivate FIstype As LongPtr#ElsePrivate FHwnd As LongPrivate FIstype As Long#End If'以下定义常数Private Const GWL_EXSTYLE = (-20)Private Const WS_EX_TOOLWINDOW = &H80&

'****************************************'---主程序---'****************************************

该文章内容来源于网络,由WPS之家(wps.qiangguoshuo.com)收集,希望能为广大朋友提供帮助。

Private Sub btnClose_Click()Unload MeEnd Sub

Private Sub btnReset_Click()#If Win64 Then '64位'取得拓展窗口样式位FIstype = GetWindowLongPtr(FHwnd, GWL_EXSTYLE)'拓展窗体样式位: 原样式无工具栏窗口样式FIstype = FIstype And Not WS_EX_TOOLWINDOW'重设拓展窗体样式位SetWindowLongPtr FHwnd, GWL_EXSTYLE, FIstype'重绘窗体标题栏DrawMenuBar FHwnd#Else'取得拓展窗口样式位FIstype = GetWindowLong(FHwnd, GWL_EXSTYLE)'拓展窗体样式位: 原样式无工具栏窗口样式FIstype = FIstype And Not WS_EX_TOOLWINDOW'重设拓展窗体样式位SetWindowLong FHwnd, GWL_EXSTYLE, FIstype'重绘窗体标题栏DrawMenuBar FHwnd#End IfEnd Sub

Private Sub UserForm_Initialize()#If Win64 Then '64位'查找本窗口句柄FHwnd = FindWindow("ThunderDFrame", Me.Caption)'取得拓展窗口样式位FIstype = GetWindowLongPtr(FHwnd, GWL_EXSTYLE)'拓展窗体样式位: 原样式和工具栏窗口样式FIstype = FIstype Or WS_EX_TOOLWINDOW'重设拓展窗体样式位SetWindowLongPtr FHwnd, GWL_EXSTYLE, FIstype'重绘窗体标题栏DrawMenuBar FHwnd#Else'查找本窗口句柄FHwnd = FindWindow("ThunderDFrame", Me.Caption)'取得拓展窗口样式位FIstype = GetWindowLong(FHwnd, GWL_EXSTYLE)'拓展窗体样式位: 原样式和工具栏窗口样式FIstype = FIstype Or WS_EX_TOOLWINDOW'重设拓展窗体样式位SetWindowLong FHwnd, GWL_EXSTYLE, FIstype'重绘窗体标题栏DrawMenuBar FHwnd#End IfEnd Sub

如想转载该文章请注明出处:强国说学习-qiangguoshuo.com
强国说学习

转载声明:本站发布文章及版权归原作者所有,转载本站文章请注明文章来源!

本文链接:https://www.qiangguoshuo.com/excel/73070.html