ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] 不一样的msgbox,要不你也试试

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2014-4-16 12:38 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:UI界面定制
本帖最后由 huanglicheng 于 2014-4-18 14:25 编辑

不久前在别人贴中回过,现在分享出来。说不定你会喜欢。你可以改成你喜欢的样式,或者改做其他更广泛的用途。

代码在18楼有更新
利用 菜单的形式做提示框: 不需点确定


单行提示MsgBoxa ("你好,我是一个提示框")
360软件小助手截图20140416123648.png
多行提示: MsgBoxa ("你好,我是一个提示框" & vbLf & "关闭我非常简单,随便哪点一下即可")
360软件小助手截图20140416123634.png



调用方式
  1. Sub test()
  2.     MsgBoxa ("你好,我是一个提示框")
  3. End Sub
复制代码

  1. Sub MsgBoxa(myMessage, Optional myTitle As String, Optional myFaceid As Long, Optional x1 As Long, Optional y1 As Long)   '菜单提示(提示内容,提示标题,图标,x位置,y位置)
  2.     On Error Resume Next
  3.     CommandBars("tmpContextMenu").Delete
  4.     On Error GoTo 0
  5.     Dim m As CommandBar, i%
  6.     Set m = CommandBars.Add("tmpContextMenu", msoBarPopup)
  7.     '--------------------------------------------------
  8.     If x1 = 0 Then x1 = 400
  9.     If y1 = 0 Then y1 = 400
  10.     '--------------------------------------------------
  11.     Set regex1 = CreateObject("VBSCRIPT.REGEXP")    'RegEx为建立正则表达式
  12.     With regex1
  13.         .Global = True    '设置全局可用
  14.         .Pattern = ".+"
  15.     End With
  16.     '--------------------------------------------------
  17.     With m
  18.         '--------------------------------------------------
  19.         With .Controls.Add(msoControlButton, , , , True)    '添加新按钮
  20.             If myTitle = "" Then .Caption = "★SoSo提示您★" Else .Caption = myTitle
  21.             .FaceId = 1954
  22.         End With
  23.         '--------------------------------------------------
  24.         Set c = regex1.Execute(myMessage)
  25.         If c.Count > 0 Then
  26.             For i = 0 To c.Count - 1
  27.                 With .Controls.Add(msoControlButton, , , , True)    '添加新按钮
  28.                     .Caption = c.Item(i).Value
  29.                     If i = 0 Then .FaceId = myFaceid: .BeginGroup = True
  30.                 End With
  31.             Next i
  32.         End If
  33.         '--------------------------------------------------
  34.         .ShowPopup x1, y1
  35.     End With
  36. End Sub
复制代码
test.zip (11.38 KB, 下载次数: 425)


评分

7

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-4-16 12:56 | 显示全部楼层
支持原创,很新颖独特,感谢分享。

TA的精华主题

TA的得分主题

发表于 2014-4-16 13:05 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-4-16 13:13 | 显示全部楼层
好,不错。

提个建议,如果能封装到类,然后所有模块,可以直接调用就更好了。

.

TA的精华主题

TA的得分主题

发表于 2014-4-16 13:21 | 显示全部楼层
有些时候可能这样的对话框比msgbox有新意
我觉得用于跟随鼠标位置处提示时非常有用
稍微修改了一下 当用户未指定时弹出在屏幕中央 指定x1=1时 在当前鼠标位置弹出
另外使用的人要注意 这个弹出时 程序还是会中断的 就是说只有当点击了其他地方或者菜单项 菜单消失后才能继续执行后续代码
  1. Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
  2. Sub MsgBoxa(myMessage, Optional myTitle As String, Optional myFaceid As Long, Optional x1 As Long, Optional y1 As Long) '菜单提示(提示内容,提示标题,图标,x位置,y位置)
  3.     On Error Resume Next
  4.     CommandBars("tmpContextMenu").Delete
  5.     On Error GoTo 0
  6.     Dim m As CommandBar, i%, regex1, c
  7.     Set m = CommandBars.Add("tmpContextMenu", msoBarPopup)
  8.     Set regex1 = CreateObject("VBSCRIPT.REGEXP")    'RegEx为建立正则表达式
  9.     With regex1
  10.         .Global = True    '设置全局可用
  11.         .Pattern = ".+"
  12.     End With
  13.     '--------------------------------------------------
  14.     With m
  15.         '--------------------------------------------------
  16.         With .Controls.Add(msoControlButton, , , , True)    '添加新按钮
  17.             If myTitle = "" Then .Caption = "★SoSo提示您★" Else .Caption = myTitle
  18.             .FaceId = 1954
  19.         End With
  20.         '--------------------------------------------------
  21.         Set c = regex1.Execute(myMessage)
  22.         If c.Count > 0 Then
  23.             For i = 0 To c.Count - 1
  24.                 With .Controls.Add(msoControlButton, , , , True)    '添加新按钮
  25.                     .Caption = c.Item(i).Value
  26.                     If i = 0 Then .FaceId = myFaceid: .BeginGroup = True
  27.                 End With
  28.             Next i
  29.         End If
  30.         '--------------------------------------------------
  31.     If x1 + y1 = 0 Then x1 = (GetSystemMetrics(0) - .Width) / 2: y1 = (GetSystemMetrics(1) - .Height) / 2
  32.     '----用户未指定位置显示在屏幕中央-----------------------------------
  33.     If x1 = 1 Then
  34.         .ShowPopup 'x1=1则弹出菜单在当前鼠标位置
  35.     Else
  36.         .ShowPopup x1, y1
  37.     End If
  38.     End With
  39. End Sub
  40. Sub test()
  41.     MsgBoxa "你好,我是一个提示框", "我的", , 1
  42.     Debug.Print 1
  43. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2014-4-16 13:23 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-4-16 14:00 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
以下是我用菜单做的提示+标记功能(功能延伸)多功能数据统计

jdfw.gif




TA的精华主题

TA的得分主题

 楼主| 发表于 2014-4-16 14:09 | 显示全部楼层
百度不到去谷歌 发表于 2014-4-16 13:21
有些时候可能这样的对话框比msgbox有新意
我觉得用于跟随鼠标位置处提示时非常有用
稍微修改了一下 当用户 ...

嗯嗯。你这样改改更人性化。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-4-16 14:11 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
yf_home 发表于 2014-4-16 13:13
好,不错。

提个建议,如果能封装到类,然后所有模块,可以直接调用就更好了。

呵呵,封装到类 咱还不会。后期会放到SoSo工具集中去

TA的精华主题

TA的得分主题

发表于 2014-4-16 18:21 | 显示全部楼层
huanglicheng 发表于 2014-4-16 14:00
以下是我用菜单做的提示+标记功能(功能延伸)多功能数据统计

这个右键菜单定义的不错。
有源码分享不,咋也学习一下。

...
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-30 19:03 , Processed in 0.054666 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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