ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] VBA依次运行Excel工作表内的宏

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-6-10 13:56 | 显示全部楼层 |阅读模式
本帖最后由 AS850629754 于 2018-6-10 14:00 编辑

此文章已在知乎发表,在这里分享一下https://zhuanlan.zhihu.com/p/37867936
2018-06-08在某度知道看到一个提问
v2-a7bf67b4dda25e24fd07f80ee00cc319_hd.jpg

看到这个问题后,我想到了以前看过了某篇文章
但该文章内的返回过程名语句实际操作时报错
v2-c9bece4d15e1c7fdeb2e6c15a8a06487_hd.jpg

又找了一篇文章
VBProject:代码操作代码之常用语句_太受欢_新浪博客 http://blog.sina.com.cn/s/blog_a680920001014tyn.html
利用这两篇文章,得到了【获取工作表内代码行数/指定行内容】的代码

思路:
遍历工作表,判断代码行数是否大于0
如果大于0,遍历每一行代码,用正则表达式判断是否为XXXX Sub 过程名()形式
如果是,取出过程名,调用该过程

因为需要获取VBA工程中的数据,必须在excel选项-信任中心-信任中心设置中勾选“信任对VBA工程对象模型的访问”
v2-a915b5e386b96efb415b2f08c7e6640f_hd.jpg

代码如下:
  1. Sub 依次运行工作表中的宏()

  2. Dim subline As Integer
  3. Dim strline As String
  4. Dim subname As String

  5. For i = 1 To Sheets.Count
  6.     subline = ThisWorkbook.VBProject.VBComponents(Sheets(i).Name).CodeModule.countoflines '获取工作表模块代码行数
  7.     If subline > 0 Then '行数大于0时
  8.         For L = 1 To subline '遍历代码行
  9.             strline = ThisWorkbook.VBProject.VBComponents(Sheets(i).Name).CodeModule.Lines(L, 1) '获取每行代码
  10.             With CreateObject("VBScript.RegExp") '使用正则表达式判断代码是否为*Sub *()形式,如果是则调用
  11.                 .Global = True
  12.                 .Pattern = ".*Sub\s(.*)\(\)"
  13.                 If .test(strline) Then
  14.                     subname = Sheets(i).Name & "." & .Replace(strline, "$1")
  15.                     Application.Run subname
  16.                 End If
  17.             End With
  18.         Next
  19.     End If
  20. Next i

  21. End Sub
复制代码

后来那个提问者采纳了一个灌水答案,可以说那次答题体验非常不愉快


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

本版积分规则

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

GMT+8, 2024-11-25 12:16 , Processed in 0.039007 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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