ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] 公开源码---VBE环境下创建工具栏(常用代码快捷录入工具)

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2014-1-9 23:37 | 显示全部楼层
本帖已被收录到知识树中,索引项:VBE环境开发
本帖最后由 Eric_宇 于 2014-1-10 09:46 编辑

office2010(win7  32位 ) 出现问题。 QQ图片20140109233650.jpg QQ图片20140109233559.jpg QQ图片20140109233524.jpg

TA的精华主题

TA的得分主题

发表于 2014-1-10 08:53 | 显示全部楼层
浮华、缠绕指尖 发表于 2013-12-19 09:46
请问一个,我自己新一个文档时申明myevent时为什么申明不了呢
就是Public WithEvents Myevent As VBIDE.Co ...

这个要引用VB5.0的

TA的精华主题

TA的得分主题

发表于 2014-4-16 13:52 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
支持一下~~

TA的精华主题

TA的得分主题

发表于 2014-4-17 15:12 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-4-17 16:20 | 显示全部楼层
感谢分享,以后写代码可以快一点了。

TA的精华主题

TA的得分主题

发表于 2014-4-20 16:37 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-4-24 23:46 | 显示全部楼层
  1. '代码缩进的学习
  2. Sub miApplyIndent() '改制版,使中国人能看懂
  3.     Dim 当前模块
  4.     Dim i As Long, k As Long
  5.     Dim 一行 As String, j As Integer, bool As Boolean
  6.     Dim Tool As Boolean, d As Boolean
  7.     Dim a As Boolean, Dool As Boolean
  8.     Set 当前模块 = ActiveWorkbook.VBProject.VBE.ActiveCodePane
  9.     k = ActiveWorkbook.VBProject.VBE.SelectedVBComponent.CodeModule.CountOfLines
  10.     sr = 当前模块.CodeModule.Lines(1, k) ' 取出全部代码
  11.     Srr = Split(sr, vbCrLf)
  12.     '下面开始对文本处理
  13.     For i = 0 To UBound(Srr)
  14.         Srr(i) = Trim(Srr(i))
  15.     Next i
  16.     For i = 0 To UBound(Srr)
  17.         一行 = Srr(i)
  18.         Select Case Left(一行, IIf(InStr(一行, " ") = 0, 999, InStr(一行, " ") - 1))
  19.         Case "Do", "For", "Private", "Select", "Sub", "While", "With", "Function"
  20.             a = True
  21.         Case "If"
  22.             If Right(一行, 4) = "Then" Then a = True
  23.         Case "Loop", "Next", "End"
  24.             d = True
  25.         Case "Case", "Else", "ElseIf"
  26.             d = True
  27.             a = True
  28.         End Select
  29.         If Right(一行, 2) = " _" And Not bool Then
  30.             a = True
  31.             bool = True
  32.         ElseIf Right(一行, 2) <> " _" And bool Then
  33.             Dool = True
  34.             bool = False
  35.         End If
  36.         If Tool Then j = j + 1: Tool = False
  37.         If d Then j = j - 1: d = False
  38.         On Error GoTo lIndentError
  39.         Srr(i) = Space$(j * 4) & 一行     '原来你在这里,哈哈
  40.         On Error GoTo 0
  41.         If a Then j = j + 1: a = False
  42.         If Dool Then j = j - 1: Dool = False
  43.         当前模块.CodeModule.ReplaceLine i + 1, Srr(i) ' 替换
  44.     Next i
  45.     Exit Sub
  46. lIndentError:
  47.     If j < 0 Then j = 0
  48.     Resume Next
  49. End Sub

  50. [2014-04-24 12:34:06]

  51. '翻译结果

  52. 过程 miapplyindent()
  53.     定义变量 当前模块
  54.     定义变量 i 为 长整型值 ,k 为 长整型值
  55.     定义变量 一行 为 字符串 ,j 为 整型值 ,bool 为 布尔值
  56.     定义变量 tool 为 布尔值 ,d 为 布尔值
  57.     定义变量 a 为 布尔值 ,dool 为 布尔值
  58.     设置 当前模块 = 活动工作簿.VB工程.vbe.activecodepane
  59.     k = 活动工作簿.VB工程.vbe.selectedvbcomponent.代码模块.countoflines
  60.     sr = 当前模块.代码模块.行数值(1 ,k)
  61.     srr = 分割字符串(sr ,回车换行符)
  62.     循环范围 i = 0 到 数组上限(srr)
  63.         srr(i) = 消除两端空格(srr(i))
  64.     下一句 i
  65.     循环范围 i = 0 到 数组上限(srr)
  66.         一行 = srr(i)
  67.         选定 条件情况 截取左侧(一行 ,如果(包含位置(一行 ," ") = 0 ,999 ,包含位置(一行 ," ") - 1))
  68.         条件情况 "do" ,"for" ,"private" ,"select" ,"sub" ,"while" ,"with" ,"function"
  69.             a = 真
  70.         条件情况 "if"
  71.             如果 截取右侧(一行 ,4) = "那么" 那么 a = 真
  72.         条件情况 "loop" ,"next" ,"end"
  73.             d = 真
  74.         条件情况 "case" ,"else" ,"elseif"
  75.             d = 真
  76.             a = 真
  77.         结束 选定
  78.         如果 截取右侧(一行 ,2) = " _" 并且 非 bool 那么
  79.             a = 真
  80.             bool = 真
  81.         否则如果 截取右侧(一行 ,2)<>" _" 并且 bool 那么
  82.             dool = 真
  83.             bool = 假
  84.         结束 如果
  85.         如果 tool 那么 j = j + 1: tool = 假
  86.         如果 d 那么 j = j - 1: d = 假
  87.         当 错误 跳至 lindenterror
  88.         srr(i) = space$(j * 4) & 一行     
  89.         当 错误 跳至 0
  90.         如果 a 那么 j = j + 1: a = 假
  91.         如果 dool 那么 j = j - 1: dool = 假
  92.         当前模块.代码模块.替换行 i + 1 ,srr(i)
  93.     下一句 i
  94.     退出 过程
  95. lindenterror:
  96.     如果 j < 0 那么 j = 0
  97.     转到 下一句
  98. 结束 过程




复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-4-25 07:51 | 显示全部楼层
win2009 发表于 2014-4-24 23:46

解析的不错,支持下。

TA的精华主题

TA的得分主题

发表于 2014-4-25 08:44 | 显示全部楼层
支持创新,支持公开源码!感谢各位的无私奉献!

TA的精华主题

TA的得分主题

发表于 2014-5-1 21:48 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
yf_home 发表于 2014-4-25 07:51
解析的不错,支持下。

我刚刚看过你代码  

生成按钮这个可以使用循环语句生成的
  1.    
  2.     With Application.VBE.CommandBars("Code Window").Controls.Add(msoControlPopup, 1, , 3, 1)  '在代码窗口右键菜单中第三个子菜单前创建弹出式菜单
  3.         .Caption = "一键录入(&One)"  '指定弹出式菜单的标题

  4.         For i = 0 To UBound(arr)

  5.             Set MenuEvent = New MyControlevent
  6.             Set MyControl = .Controls.Add(msoControlButton, 1, , , True)  '创建子菜单
  7.             With MyControl
  8.                 .Caption = arr(i)  '指定标题
  9.                 .Style = msoButtonIconAndCaption  '同时显示文字与图标
  10.                 .FaceId = brr(i)  '设置图标
  11.                 Set MenuEvent.Myevent = Application.VBE.Events.CommandBarEvents(MyControl)  '设置事件
  12.                 Only.Add MenuEvent
  13.             End With

  14.         Next

  15.     End With
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-22 11:55 , Processed in 0.044284 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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