ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 如何提取VBA代码的程序标题及注释

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-5-20 08:27 | 显示全部楼层 |阅读模式
如何将VBA代码中sub行所在的程序标题,和该行注释批量提取出来?

尤其是注释,那一行所在的或者前后的注释。例如下图'后边的内容
image.png

TA的精华主题

TA的得分主题

发表于 2024-5-20 08:40 | 显示全部楼层
不知所云。是要清空注释还是提取注释,没有代码对照,提取的注释又有何意义

TA的精华主题

TA的得分主题

发表于 2024-5-20 08:54 | 显示全部楼层
Sub ReadModule()
    Dim modulename As String
    Dim brr As Variant, i As Double
    On Error GoTo err '防止无代码时出错
    modulename = ActiveSheet.Name  '设置模块名称
    With Application.VBE.VBProjects(1).VBComponents(modulename).CodeModule
        brr = Split(.Lines(1, .CountOfLines), vbCrLf) '将代码行拆分成字符串数组
    End With
    For i = 0 To UBound(brr) '循环每行代码
        '判断代码开头是否为Sub,执行自己所需代码
    Next
    MsgBox "代码总行数:" & UBound(brr) + 1
    End
err:
    MsgBox "无代码!"
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-5-20 10:40 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-20 15:28 | 显示全部楼层
feilanga 发表于 2024-5-20 08:40
不知所云。是要清空注释还是提取注释,没有代码对照,提取的注释又有何意义

提取注释,相当于编写的时候,已经给程序名做了一个中文名称解释备注,这样当程序过多找不到的时候,我就能抽到Excel清单里,然后好查找,因为模块也太多了……直接找不到

TA的精华主题

TA的得分主题

发表于 2024-5-20 15:42 | 显示全部楼层
在多个模块查找需要遍历模块的
    For Each Modul In Application.VBE.ActiveVBProject.VBComponents
        Debug.Print "名称:" & Modul.Name
    Next Modul

TA的精华主题

TA的得分主题

发表于 2024-5-20 20:04 | 显示全部楼层
先用代码获取所有的代码
第二张图是得到的代码文本

然后拆解这个文本, 每行用   '   或者 REM  再拆解, 你就获得了全部的注释部分了
QQ截图20240520200101.png

2.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-1 21:24 | 显示全部楼层
opiona 发表于 2024-5-20 20:04
先用代码获取所有的代码
第二张图是得到的代码文本

感谢您的回复,最后用Program的 ProcStartLine找到了程序所在行,然后用拆分字符的方法找到了注释。解决了问题。
但还有一点问题在于,ProcStartLine找到的不一定是程序名所在行,经常向下偏一两行,也有不偏的,可能跟我前边有空行有关?后来加了前后几行寻找的循环语句,解决了问题,但是您知道偏离一两行的原因么?

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-1 21:24 | 显示全部楼层
tanglf188 发表于 2024-5-20 08:54
Sub ReadModule()
    Dim modulename As String
    Dim brr As Variant, i As Double

这个方法确实也可以解决,谢谢。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-6-3 05:38 , Processed in 0.047309 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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