ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 代码简写,弊!—— .MoveEnd 1,-1

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-3-27 07:08 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 413191246se 于 2018-4-26 23:44 编辑

***代码简写,有利有弊,现在,我觉得弊大于利了,从明天开始,我想把所有代码都规范书写,不来简写了。简写不利于维护识别。
***2018年4月26日最新更新:
* 光标移到文首
标准写法:Selection.HomeKey unit:=wdStory
简化写法:Selection.HomeKey 6

* 假设光标在文档中间,则选定光标以下的部分:
标准写法:Selection.EndKey unit:=wdStory, Extend:=wdExtend
简化写法:Selection.EndKey 6, 1

*总结:全文 wdStory 简写代码=6,行 wdLine 简写代码=5,段落 wdParagraph 简写代码=4,字符 wdCharacter 简写代码=1,延伸 Extend:=wdExtend 简写代码=1
-------------------------------------------------------------------------
***今天最新发现:extend:=wdExtend,可以写为 1的。
比如:
    Selection.MoveDown 4, 1, 1
    Selection.MoveDown unit:=wdParagraph, Count:=1, Extend:=wdExtend

这两句代码作用是一样的,都是向下延伸选定下一段落的。
------------------------------------------------------------------------------------------------
* VBA 代码简写,是在熟练/熟悉的基础上才简写的,不熟的话想写也写不出来,所以,我仍然坚持要简写,并向 杜先生/老师 等高人看齐。
* 代码简写,比如连用 .MoveEnd 4, -1 和 .MoveEnd 1,-1 使我乐开了花,太方便了!但是要想简写,需要掌握正确/标准的写法后方可。
* 最新最新小发现—— .MoveEnd 1,-1(这是什么意思呢?它的标准写法是:Selection.MoveEnd unit:=wdCharacter, Count:=-1,意思就是将选区尾部缩小一个字符(向里缩小),常常用在文字或单元格中包括段落标记/表格单元格结束符不需要的情况下。前 1 是字符的代码,后 1 是数目)。
* 为了方便也喜欢简写的朋友,特分享一下最新小发现。
* 罗嗦一句:我就是从 .MoveEnd 这个方法学会后,不断运用,后来也会了 .MoveStart 和 .MoveEndUntil,其它的方法尚未学会,但帮助很大。
*
* 将频繁用到的对象赋予变量,运行速度会提升不少。举个简单的例子:假设有 3 段文字。我选定第 2 段文字,并设它为 set r=Selection.Range
   则第 1 段文字不必用 Select 方法激活/选定,只须用 区域(Range)即可,即代码写为:r.previous(4,1)  第 3 段则为 r.next(4,1)
*
* 假设我选定了 3 段文字,如果想去掉一段怎么办?只须尾部去掉一段写为 Selection.MoveEnd 4,-1
   还剩两段选定,如果头部去掉一段怎么办?只须写为 Selection.MoveStart 4,1(4 代表《段落 wdParagraph》,1 和 -1 代表数目,减号/负号代表向前或向后缩进的方向)。
*
* 假设我选定了一段文字,如果不想包括 段落标记(回车符)怎么办?只须 Selection.MoveEnd 1,-1
* 假设我选定了上一段的段落标记(回车符)和下一段不想要上一段的段落标记(回车符)怎么办?只须 Selection.MoveStart 1,1
* 前 1 代表《字符wdCharacter》,后 1 代表数目。
*
* 小总结:
.MoveEnd 4,1选定区域尾部缩小一个段落
.MoveEnd 1,1选定区域尾部缩小一个字符(.MoveStart是头部,与 .MoveEnd 类似)
.Next(4,1)当前选定段落的下一段落
.previous(4,1)当前选定段落的上一段落
----------------------------------------------------------
* 最近一段时间跟 杜先生 学到不少代码简化写法,很喜欢,现在分享一下,以便对大家有所帮助:*
* 全文替换(a全部替换为b):
* 标准:
    ActiveDocument.Content.Find.Execute findtext:="a", replacewith:="b", Replace:=wdReplaceAll
* 简写:
    ActiveDocument.Content.Find.Execute "a", , , 0, , , , , , "b", 2
* 上面 0 代表不勾选“使用通配符”,如果代码中用到了如 []@{} 等通配符的话,上面的要改为 "",,,1,,,,,,(通俗地讲就是,前面 3 个豆,后面 6 个豆)。
* 〈选定下一段〉:
* 假设已选定当前段落为 Selection(下一段落及下下段落存在),则下列代码选定下一段(简写):
    Selection.Next(4, 1).Select
它的标题写法是:
    Selection.Next(unit:=wdParagraph, Count:=1).Select
选定下一段的下一段简写:
    Selection.Next(4, 1).Next(4, 1).Select
选定下一段的第一个字符:
       Selection.Next.Select
上面只须把 Next 改为 Previous 则变为选定上一段,即:
    Selection.Previous(4, 1).Select
解释:4 是段落代号,1 是 count
*
*《判断是否在表格中》简写:
传统写法:
    If Selection.Information(wdWithInTable) = True Then MsgBox "In Table"
简写:(如果在表格中,则)
    If Selection.Information(12) Then MsgBox "In Table"
简写:(如果不在表格中,则)
    If Not Selection.Information(12) Then MsgBox "Out Table"
*
*《选定光标所在段落》:
传统写法:
    Selection.Paragraphs(1).Range.Select
简写:
    Selection.Expand 4
标准写法:
    Selection.Expand unit:=wdParagraph
*
* 折叠:(光标移至行尾)
传统写法:
    Selection.EndKey unit:=wdLine
简写:
    Selection.Collapse 0
*
* 值得一提的是:Selection/Select 激活/选定对象,影响速度;最好是设置为 Range(区域)对象,避免激活对象,这样 VBA 代码运行速度会大大提高(VBA 代码优化应注意的问题还有:尽量设置变量为长整型,即 Long 型;多运行 For Each ... Next 循环遍历集合写法;还有多应用 With ... End With;等等。)
* 不过,有时候经过测试,Selection 查找会比 Range 查找稍快一点,我说的是有的时候,可能与算法有关;多数时候应该是 Range 方法较快,但也慢于正则表达式用法,还是 正则 取胜,杜先生/老师 用得较纯熟。

评分

3

查看全部评分

头像被屏蔽

TA的精华主题

TA的得分主题

发表于 2018-3-27 08:35 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-3-28 09:51 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
学习一下,谢谢分享!

TA的精华主题

TA的得分主题

发表于 2018-3-28 12:41 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-3-29 01:11 | 显示全部楼层
Collapse 作用,类似于 Selection.HomeKey unit:=wdLine 或 Selection.EndKey unit:=wdLine,注意光标位置;向前折叠,可以写作 Collapse;向后折叠,可以写作 Collapse 0;有时循环查找时,可以用上面两种语句来取消选定,即 HomeKey/EndKey,相当于手动按 Home/End 键。

* 值得一提的是:这两天我又看了几篇关于 VBA 宏代码优化的文章,文中提到:代码简写也有弊端,可能当时图省事、快捷;但过后,可能会给代码维护和易用识别上增加麻烦;所以,也要慎用。

TA的精华主题

TA的得分主题

发表于 2018-3-29 12:12 | 显示全部楼层
简写并不能提高代码的执行效率,但可读性就差太多了,所以不提倡

TA的精华主题

TA的得分主题

发表于 2018-3-30 12:54 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
413191246se 发表于 2018-3-29 01:11
Collapse 作用,类似于 Selection.HomeKey unit:=wdLine 或 Selection.EndKey unit:=wdLine,注意光标位置 ...

就是说,Collapse就是移动光标到选区开头或末尾?

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-4-11 23:27 | 显示全部楼层
楼上,如果是 Selection 对象,确实是移动光标;但如果是 Range 对象,则光标不移动,但用 .Select 方法可以观察到。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-4-12 00:15 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
原来这句代码:
Selection.Next(unit:=wdParagraph, Count:=1).Select
我记不住,也不理解,最近,这段代码理解了,原来 .Next 也是一种方法!简写以后,太方便了!

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-4-12 22:37 | 显示全部楼层
顶一下,以方便大家。。。。。。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-11 20:46 , Processed in 0.025259 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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