ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 提速乐!Move4 远远快于 ForEachNext(循环遍历所有段落)

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-17 09:20 | 显示全部楼层
* 谢谢 zhanglei 老师!——但运行结果不正确!老师如方便,可重新斟酌之。
* 昨晚开机时蓝屏,反复重启均如此!以为要请人修理,后灵机一动,按F11键恢复了系统备份,又恢复最近的注册表,OK了!用360杀毒、360安全卫士反复“强力模式+全盘扫描”确认是驱动型病毒作怪,后反复扫描,没有及时上线回复老师,抱歉!
* 再次谢谢 老师!也谢谢 ming 老师,及 小花鹿 老师!

TA的精华主题

TA的得分主题

发表于 2019-10-20 11:43 | 显示全部楼层
本帖最后由 daibao88 于 2019-10-20 16:51 编辑

           审核中

TA的精华主题

TA的得分主题

发表于 2019-10-20 11:53 | 显示全部楼层
Sub test()
    Dim doc As Document, i As Integer
    Set doc = ActiveDocument
    If doc.Tables.Count >= 1 Then
        For i = 1 To doc.Paragraphs.Count
            If doc.Paragraphs(i).Range.Information(12) Then
                i = i + doc.Paragraphs(i).Range.Tables(1).Range.Paragraphs.Count - 1
            Else
                doc.Paragraphs(i).Range.Font.Color = wdColorRed '红色
            End If
        Next
    Else
        doc.Range.Font.Color = wdColorRed
    End If
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-10-20 12:45 | 显示全部楼层
咦?没看到 daibao88 老师 的回复呢!

TA的精华主题

TA的得分主题

发表于 2019-11-4 17:43 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-11-4 22:27 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
ming 老师 是否方便提供示例文本?

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-8-15 22:38 | 显示全部楼层
总结:一般来说,小文档,无表格时,用 ForEachNext 比较快;有表格用 .Move 4 比较快!但我在测试一个文档时,发现有表格时,.move 4 会造成程序无响应,这是很危险的!我想,之所以这样,是因为,.move 4 总是到下一段首,是 Selection 对象激活,造成不停地刷屏/刷新,影响排版;所以,安全起见,无论有无表格,还是统统用 ForEachNext 才稳妥。

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-8-16 13:15 | 显示全部楼层
本帖最后由 413191246se 于 2020-8-16 14:03 编辑

* 谢谢 daibao88 老师(的代码)!
*
* 刚才经重新测试,zhanglei 老师的代码,创造奇迹了!(当然我加了一个标签 sk:,否则会无限循环。)
*
* zhanglei 老师的代码,删除空行时(有表格),是我编的传统 For Each ... Next 代码的速度的 10-20 倍!
(实际测试值是:小文档,张=0.02秒/我=0.2秒;大文档,张=0.63秒,我=12.22秒)可谓极速!
*
* ming 老师 看到回帖,请再测试一下你的代码,与 张老师的代码 VS 一下(这里也严重再次谢谢一下 ming 老师啊!可能 张老师 也是根据你的提示写的代码呢!)。
*
* 下面是 zhanglei 老师的代码:
  1. Sub 删除空行()
  2. 'code by zhanglei1371/提速10-20倍!可谓极速!(小0.02秒/0.2秒/大0.63秒/12.22秒)
  3.     With ActiveDocument.Range(0, 0)
  4.         Do
  5.             If .Tables.Count Then
  6.                 .Start = .Tables(1).Range.Next.Start
  7.                 GoTo sk
  8.             Else
  9. sk:
  10.                 If .Paragraphs(1).Range.Text = vbCr Then .Paragraphs(1).Range.Delete Else .MoveStart 4
  11.             End If
  12.         Loop Until .Paragraphs(1).Range.End = ActiveDocument.Content.End
  13.         If .Paragraphs(1).Range.Text = vbCr Then .Paragraphs(1).Range.Delete
  14.     End With
  15. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-8-16 20:15 | 显示全部楼层
* 各位朋友,请注意:楼上结果,只是针对《有表格的文本》来测试删除空行,下面针对《无表格的纯文本》的测试结果,又有分晓:
vsdelline.gif

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-8-16 20:20 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
* 总结:如果有表格,则删除空行应该选用 18 楼代码!如果无表格,则选用 19 楼第 3 个程序 DelLine.
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-27 23:08 , Processed in 0.040618 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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