ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 34770|回复: 74

[分享] 制作悬浮按钮

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2014-9-11 11:46 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 delete_007 于 2014-9-12 08:25 编辑

所谓的”悬浮按钮“指的是:不会因为页面的上下左右滚动而移出可视区域的控件。要想达到这个效果,除了使用冻结窗格的方法外,还可以使控件始终位于工作表的固定位置。
第一种方法:使用无模式的窗体。
    制作步骤:
        1.在VBE窗口中,插入用户窗体,并设置用户窗体的ShowModal属性为False。(其余美化工作可自行设置)
        2.在用户窗体上添加一个Label控件,设置控件的Back Style属性为0,Caption属性为你需要显示的名字。
        3.调整窗体和标签的位置和尺寸。
        4.双击窗体,输入如下代码。
  1. Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
  2. Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
  3. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  4. Private Declare Function DrawMenuBar Lib "user32" (ByVal hWnd As Long) As Long
  5. Private Declare Sub ReleaseCapture Lib "user32" ()
  6. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  7. Private Const GWL_STYLE As Long = (-16)
  8. Private Const WS_CAPTION As Long = &HC00000
  9. Private Const WM_NCLBUTTONDOWN = &HA1
  10. Private Const HTCAPTION = 2

  11. Private Sub UserForm_Initialize()
  12.     Dim lngStyle As Long
  13.     Dim hWnd As Long
  14.     hWnd = FindWindow(vbNullString, Me.Caption)
  15.     lngStyle = GetWindowLong(hWnd, GWL_STYLE)
  16.     SetWindowLong hWnd, GWL_STYLE, lngStyle And Not WS_CAPTION
  17.     DrawMenuBar hWnd
  18.     Me.Height = 31.5
  19. End Sub

  20. Private Sub Label1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
  21.     Dim hWnd As Long
  22.     hWnd = FindWindow(vbNullString, Me.Caption)
  23.     ReleaseCapture
  24.     SendMessage hWnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&
  25. End Sub
复制代码
       5.在thisworkbook中添加如下代码:
  1. Private Sub Workbook_Open()
  2.     UserForm1.Show
  3. End Sub
复制代码
       6.保存并关闭工作薄,当再次打开工作薄时,就会出现一个悬浮按钮。效果如下图所示(可以将按钮拖放到任意位置):
按钮1.gif

制作悬浮按钮.rar (16.51 KB, 下载次数: 2064)




评分

9

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-9-11 11:55 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 delete_007 于 2014-9-11 12:06 编辑

第二种方法:API函数配合计时器
    制作步骤:
        1.在工作表中插入一个命令按钮。
        2.进入VBE窗口,在Thisworkbook下面添加如下代码:
  1. Private Sub Workbook_beforeClose(cancel As Boolean)
  2.     Call KillTimer(0, TimerID)
  3. End Sub

  4. Private Sub Workbook_Open()
  5.     TimerID = SetTimer(0, 0, 100, AddressOf OnTimer)
  6. End Sub
复制代码
       3.插入模块,添加如下代码:
  1. Public Declare Function SetTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
  2. Public Declare Function KillTimer Lib "user32" (ByVal hWnd As Long, ByVal nIDEvent As Long) As Long
  3. Public TimerID As Long
  4. Public Sub OnTimer()
  5.     On Error Resume Next
  6.     Sheet1.Shapes("Button 1").Top = ActiveWindow.VisibleRange.Top + 10
  7.     Sheet1.Shapes("Button 1").Left = ActiveWindow.VisibleRange.Left + 10
  8.     Sheet1.Shapes("Button 2").Top = ActiveWindow.VisibleRange.Top + 50
  9. End Sub
复制代码
       4.保存并关闭工作薄,再次打开工作薄,即可得到悬浮按钮,效果如下图:
悬浮按钮.gif

悬浮按钮2.rar (16.75 KB, 下载次数: 1030)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-9-11 13:07 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-9-11 13:54 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-9-11 19:45 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
效果不错,谢谢了。

TA的精华主题

TA的得分主题

发表于 2014-9-11 20:04 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-9-11 20:38 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
为什么第一种方法,进入设计模式,按钮消失了,退出设计模式,按钮还是找不到?

点评

退出设计模式之后要重新运行一下UserForm_Initialize这个过程,按钮才会出现。  发表于 2014-9-12 08:23

TA的精华主题

TA的得分主题

发表于 2014-9-11 21:12 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
好东西,版主辛苦了

TA的精华主题

TA的得分主题

发表于 2014-9-11 21:16 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-10-1 11:33 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-19 20:39 , Processed in 0.037814 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表