在 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
转载声明:本站发布文章及版权归原作者所有,转载本站文章请注明文章来源!