Excel VBA 窗体之工具栏式窗体(小标题窗体)实现代码
发布时间:2023-08-14 09:32:42
在 VBE 编辑器中,我们能看到很多的小标题栏窗体,这就是工具栏窗体,其实我们通过对VBA用户窗体的定制,也可以使VBA的用户窗体成为工具栏式窗体。本文就是运用API函数来定制 Office 中的用户窗体,使其成为工具栏窗体。
附件下载:
点击链接从百度网盘下载
操作如下:
◾在Excel 的VBE窗口中插入一个用户窗体,将其命名为 frmTools。在用户窗体中添加两个按钮,然后再添加一个模块。在窗体和模块中添加后面所列代码。
◾在工作薄中的任意工作表中添加一窗体按钮控件,将指定其 设置宏 为 btnToolsForm_Click。其供示范之用.
具体代码:
"ModToolsForm" 模块代码
Sub btnToolsForm_Click()
frmTools.Show
End 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 LongPtr
Private Declare PtrSafe Function GetWindowLongPtr _
Lib "user32" _
Alias "GetWindowLongPtrA" ( _
ByVal hwnd As LongPtr, _
ByVal nIndex As Long) _
As LongPtr
Private Declare PtrSafe Function SetWindowLongPtr _
Lib "user32" _
Alias "SetWindowLongPtrA" ( _
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
#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 LongPtr
Private FIstype As LongPtr
#Else
Private FHwnd As Long
Private FIstype As Long
#End If
'以下定义常数
Private Const GWL_EXSTYLE = (-20)
Private Const WS_EX_TOOLWINDOW = &H80&
'****************************************
'---主程序---
'****************************************
Private Sub btnClose_Click()
Unload Me
End 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 If
End 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 If
End Sub
Excel VBA 窗体之工具栏式窗体(小标题窗体)实现代码的下载地址:


猜你喜欢
- 在Excel中经常因为录入的数据过长,但又不能更改列宽的情况下就只能进行调整行高了。下面是小编整理的excel2003调整行高的方法以供大家
- 平时工作一个显示器不够用的时候都会选择再外接一个显示器,且现在的电脑显卡都很强大,基本都能支持多个显示器同时显示,可以有效提高工作效率,那我
- PPT怎么制作漂亮的沙漏动画效果?ppt中想要绘制一个沙漏图形并制作沙漏动画效果,该怎么制作呢?下面我们就来看看详细的教程,需要的朋友可以参
- 打开Windows8.1地图应用时发现win8.1地图是英文的如果你自己的英文水平不是那么的好,该怎么办呢?下面有个不错的win8.1地图中
- PPT怎么画竹子?ppt中想要画竹子,该怎么画竹子呢?下面我们看看ppt使用形状工具绘制绿色竹子的教程,很简单,需要的朋友可以参考下ppt中
- chrome突然发生诡异的事情,在网址的旁边,就是按键刷新页面,按下去不是当前页面刷新,而是新打开一个页面刷新,而按F5是正常的,会在当前页
- 要修改 Microsoft Office Word 2007 某次启动的方式,可以在 Microsoft Windows“运行”命令(“开始
- 有些xp系统用户反馈自己在选择“启用休眠”功能时,遇到了“拒绝访问”提示,这是怎么回事呢?这种情况怎么办呢?本文将提供XP系统启用休眠功能时
- 在Win10系统中系统会默认自动升级功能,一般升级比较费时间,以及有些用户不想老是更新,所以想要关闭系统自动更新。那么应该如何操作呢?今天小
- 今年全新发布的iPhone 7/7 Plus取消了之前一贯沿用的机械式按压Home键,由压敏键来代替,但未来iPad在这部分的改变,可能会更
- 近期有部分Win10用户在电脑的使用中,遇到了系统提示不支持此接口的情况,对此十分苦恼,不知道应该如何是好。针对这一情况,今天小编将为大家分
- 其实,看似粗糙的Win7还是个贴心的小管家,它内置了一款软件可以最快输入各类公式,那么Win7如何最快输入各类公式?下面一起来看看吧!若你家
- Win7是微软2009年发布的一款操作系统,现在已相当的完善,是目前使用人数最多的一款操作系统,那么win7系统的开机密码如何取消呢?针对这
- 这篇教程是向脚本之家的朋友介绍Excel用Tan函数返回某一角度的正切值方法,教程真的很不错,对于不知道怎么操作的朋友可以参考一下,希望能对
- 这两天有网友要求发PPT的教程,我就把这个时钟作为例子做了这个教程,技术含量不高,旨在拓展大家的思路,盘活我们的创造性思维,没有做不到,只有
- 黑盒工坊为用户提供了免费的插件管理功能,能够帮助用户轻松下载使用各种插件,提高游戏体验。近期有用户在问黑盒工坊自动跟随插件怎么设置?其实方法
- 用户是win11系统,内存完整性打不开,显示的是tesmon.sys驱动不兼容,tesmonsys一般指tesmon.sys系统文件,是腾讯
- 争取更多用户安装和使用Win10,微软可以说还是蛮拼的,最突出的就是为Win7/Win8.1用户免费提供Windows10正式版升级。除此之
- ISO文件是什么?ISO文件其实就是光盘的镜像文件,刻录软件可以直接把ISO文件刻录成可安装的系统光盘,ISO文件一般以iso为扩展名,其文
- 咱们都 晓得,WPS 默许的分栏 数量是1,也 便是说打印 进去的 笔墨都以一栏 显现。 一朝一夕,读者会 以为 这类版式 过分 枯燥,要