ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] 正则表达式之庖丁解牛: 如何去掉VBA代码中的注释

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-6-28 10:23 | 显示全部楼层
学习分析问题、解决问题的方法

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-6-28 10:54 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
zpy2 发表于 2020-6-28 07:38
这种用正则replace非常巧妙,我在想直接match不用replace是否可以。
在没有 Rem语句的情况下,我用
(?:"[ ...

可以用正则的Execute方法,获取MatchCollection集合,从其中摒弃非目标字符,就得到精准的目标字符。

如动图所示,正是用Execute方法,获取到每段目标字符的起止边界,然后才可以利Range.Characters(Start, lenght).Font属性,设置相应字符段字体的颜色、加粗、字号大小等各项属性。

但是,Execute方法和Replace方法,它们适合出场的场合不同:前者适合于不允许改变源字符串本身字符内容的场合,后者则适应于必须改变源字符串本身字符内容的场合。

所以,论坛里各种关于特定字符提取、替换或清除的求助问题,都是要求改变源字符串本身的字符内容的问题,基本上都以Replace方法解决为宜,只有一些特例,比如商品批量涨价(上涨固定值或按百分比或其它规则涨价),需要先提取商品价格数据、再通过二次加工后代回去的,这种情况仅以Replace方法是不好解决的,才考虑用Execute方法解决。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-7-1 14:55 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
针对如下形式的VBA代码如何清除注释

Sub Test()
    s = "ssss, 'xxxxxxx ',ff" & CStr(i) & _
        "ff" & "Test " _
         & " cccc "" cccc "" xx "  'xxxxxxx' ' ' ' 'bbbbb _
                                    xxxxxxxffffff
                              
    'adfadfadfadfad _
    adfadfadfadfadfadf _
    adfadfasdfad'"" '''' """"fadfadfa
   
    Rem test
    Rem test _
             this need to be removed.
End Sub
Snap1.jpg

TA的精华主题

TA的得分主题

发表于 2020-7-1 14:59 | 显示全部楼层
xlsber 发表于 2020-7-1 14:55
针对如下形式的VBA代码如何清除注释

Sub Test()

我之前想的是先将带换行的代码全部变成一行之后再用你的正则清除,可行,但是有一点就是会改变非注释中的换行代码变为一行,我不想改变原来代码的格式,试了很多次都没成功。

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-7-1 16:53 | 显示全部楼层
xlsber 发表于 2020-7-1 14:59
我之前想的是先将带换行的代码全部变成一行之后再用你的正则清除,可行,但是有一点就是会改变非注释中的 ...

原来的字面形式:
(?:'|(?:^|:) *Rem\b).*|(".*?")
改为:
(?:'|(?:^|:) *Rem\b)(?:.*? _\n)*.*|(".*?")

表示:批注内容,从它的引导符到它结尾之间,允许加入任意连续多行以下划线结尾的内容。

正则表达式去除VBA代码中的注释2.rar (21.85 KB, 下载次数: 20)


评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-7-1 16:57 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
ggmmlol 发表于 2020-7-1 16:53
原来的字面形式:
(?:'|(?:^|:) *Rem\b).*|(".*?")
改为:

厉害

TA的精华主题

TA的得分主题

发表于 2020-7-17 23:40 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
大侠,根据你的庖丁解牛思路,针对获取SQL语句中涉及到的 表 以及连接关系(即表TableA,TableB,TableC 以及语句中可能出现的LEFT,RIGHT,INNER,CROSS连接关键字),这两个分别写出了正则,但是不知道怎么把它们汇总在一起,你帮我看下吧,谢谢

要查的字符串:
SELECT * FROM TableA;
SELECT a.ID, b .Name FROM TableA a, TableB b WHERE a.ID = b.ID;
SELECT a.ID, b.Name FROM TableA a LEFT JOIN TableB b ON a.ID = b.ID;
SELECT * FROM TableA a INNER JOIN TableB b ON a.ID = b.ID WHERE a.ID > 1000;
SELECT * FROM TableA a LEFT JOIN TableB b ON a.ID = b.ID LEFT JOIN TableC c ON c.Name = b.Name;


我写的正则:
1. 获取表名称
\s*(?<=from|join|from\b.*,)\s+(\w+)

2.获取连接关键字(即join前面的单词)
(\w+(?=\s+\bjoin\b\s+))

TA的精华主题

TA的得分主题

发表于 2020-7-18 10:30 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-12-22 21:08 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-3 11:18 , Processed in 0.048322 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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