ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 跳过表格(宏)SkipTable(由 sylun 老师编写)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-2-9 01:35 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
* 昨早我重写了一段《跳过表格》宏,沾沾自喜!但与本坛大神 sylun 老师以前所写的宏对比测试后发现,sylun 老师写的宏速度是我的宏的 2.5 倍!看来,公文自动排版整体框架还是要用 sylun 老师的。
* 下面是 sylun 老师以前所写的《跳过表格》宏(我略改了一下),仅供各位朋友及新人朋友参考借鉴:
(在应用宏之前,请自行准备两个Word文档,一个是纯文字的;一个是字表混合的(最好有两个表))。
* 排版思路:纯文字文档,全选统一处理;字表混合文档,须将表格当作大田田埂、表前/表间/表后文字区域当作禾苗,即 Range 区域,循环处理即可(有兴趣的朋友们可以参考借鉴我的《公文自动排版》代码)。
  1. Sub TextStyle()
  2.     Dim r(), t As Table, n&
  3.    
  4.     With ActiveDocument
  5.         ReDim r(.Tables.Count + 1) 'skip table/code by sylun
  6.         
  7.         If .Tables.Count = 0 Then
  8.             Set r(1) = .Content
  9.         Else
  10.             For Each t In .Tables
  11.                 With t.Rows
  12.                     .WrapAroundText = False
  13.                     .Alignment = wdAlignRowCenter
  14.                 End With
  15.             Next
  16.             
  17.             For n = 1 To .Tables.Count
  18.                 If n = 1 Then
  19.                     Set r(n) = .Range(0, .Tables(n).Range.Start)
  20.                 Else
  21.                     Set r(n) = .Range(.Tables(n - 1).Range.End, .Tables(n).Range.Start)
  22.                 End If
  23.             Next
  24.             Set r(n) = .Range(.Tables(n - 1).Range.End, .Content.End)
  25.         End If
  26.         
  27.         For n = 1 To UBound(r)
  28.             With r(n)
  29.                 .Select
  30.                 .Font.Color = wdColorBlue
  31.             End With
  32.         Next
  33.     End With
  34. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2024-2-9 12:28 来自手机 | 显示全部楼层
你的2.5分之一的代码也贴出来学习下,感觉不应该差太多

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-2-9 19:07 | 显示全部楼层
* zhanglei 老师:过年好!合家欢乐!
* 我昨早写的是用 Selection 对象,刚才改为 Range 对象,短一点的文档,速度确实比 sylun 老师的快一点(他 0.04 秒,我 0.02 秒);但长一点的文档就不行了,还是他的快。究其原因,我写的是逐段扩展,必然不如整片(Range)选取快速。——所以,最终,跳过表格(宏),还是要采用 sylun 老师的代码!
* 但我也把我写的贴上来,大家可以一观:
  1. Sub a1_SkipTable_me_range_optimize()
  2. '0.02s/2024/2/9/18:33
  3. '0.015s
  4.     Dim l!: l = Timer
  5.     Dim doc As Document
  6.     Set doc = ActiveDocument
  7.     With doc.Range(0, 0)
  8.         Do
  9.             Do While Not .Next(4, 1).Information(12)
  10.                 .MoveEnd 4
  11.                 If .End = doc.Content.End Then Exit Do
  12.             Loop
  13.             .Font.ColorIndex = wdBlue
  14.             .Start = .End
  15.             If .End = doc.Content.End - 1 Then Exit Do
  16.             If .Information(12) Then .Start = .Tables(1).Range.End
  17.         Loop
  18.     End With
  19.     MsgBox Timer - l
  20. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2024-2-9 20:18 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-2-10 10:41 | 显示全部楼层
* 祝 gwjkkkkk 老师,及论坛所有朋友们:过年好!新年好!春节快乐!合家欢乐!身体健康!万事如意!

TA的精华主题

TA的得分主题

发表于 2024-2-10 14:22 来自手机 | 显示全部楼层
Se 老师,新年好。
图中所圈的是否改为:r(n+1)?
IMG_6729.jpeg

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-2-10 21:08 | 显示全部楼层
本帖最后由 413191246se 于 2024-2-10 21:11 编辑

wdpfox 过年好!——不要改!sylun 老师的代码经测试是完全正确的!说实话,虽然我也不知道 n=3 是怎么来的!——如果你改了,你可以测一下,看看 r(1)、r(2)、r(3) 区域(range)经 Select 后,是不是正确。
   
排版思路:如果是纯文本,则整个文档就是一个 Range(区域);如果是字表混合文档,则表格如田埂,文字区域(表前、表中、表后)分别是 Range1、Range2、Range3,只要对这几个区域(Range)循环处理即可。

TA的精华主题

TA的得分主题

发表于 2024-2-22 14:45 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-3-13 11:19 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-3-21 02:16 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
* 楼上朋友,你好!——这段代码仅仅是说明,无论是纯文本(无表格)排版,还是字表混合排版,绕过表格,仅排版文字区域,是一种排版思路;因为,表格排版不太好办。
* 如果哪位朋友也想自己编辑排版程序,可以借鉴此代码,算是一种算法、架构,是公文自动排版的基础。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

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

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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