ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] Word2003VBA 通用模板宏(2019元旦版)更新:2018-12-29

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-21 19:24 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
翼★虎,你好!——在 2003 中,“插入”菜单——数字——键入一个数字,如 5,确定——将此过程录下来发现,有一个叫 ChineseNum3 的也许是函数,我也不懂,你看你能否在你的 2010 中重复此过程?
——我建议不要轻易放弃《Title2345AutoNum》这个宏,因为有它就可以不用校对公文标题四个层次的编号(序号)了!否则每个文档编号都要人工目视校对。——这个宏,原来我以为很难搞,但一动手发现,也不是太难,轻松突破。

TA的精华主题

TA的得分主题

发表于 2019-1-22 13:47 | 显示全部楼层
413191246se 老师好,我看了你以前的帖子,有一篇关于序号连续判断的帖子,借鉴杜先生的帖子做了修改基本达到了目的。我增加了序号转文本后,标题为“1.XX,2.XX”时候,全篇连续编排,不会被“一、XX,二、XX”及“(一)XX 、(二)、XX”打断重拍。另外,标题与正文不分段时候会整段识别为标题“(二)主要目标。进一步明确规范……”→ “(二)主要目标。进一步明确规范……”最近电脑无法上传附件,沟通起来稍显不便,老师见谅。

  1. Sub Title2345AutoNum()
  2. Dim a, b, j&, ksr$, x&, sr$, r1$, r2$, r3$, r4$
  3.     Call ListTitle(ActiveDocument)
  4.     ActiveDocument.content.Find.Execute "^11", , , 1, , , , , , "^p", 2
  5.     ActiveDocument.content.Find.Execute "^p^w", , , 0, , , , , , "^p", 2
  6.     sr$ = "〇一二三四五六七八九十百千万亿"
  7.     r1$ = "[" & sr & "]@、": r2$ = "[((][" & sr & "]@[))]"
  8.     r3$ = "[0-9]@[、..]": r4$ = "[((][0-9]@[))]"
  9.     a = Array(r1, r2, r3, r4)
  10.     b = Array("标题 2", "标题 3", "标题 4", "标题 5")
  11.     For j = 0 To UBound(a)
  12.         With ActiveDocument.content.Find
  13.             Do While .Execute(a(j), , , 1)
  14.                 With .Parent
  15.                     If Not .Information(wdWithInTable) Then
  16.                         x = Len(.Text): ksr = .Text
  17.                         .Expand 4: .Collapse
  18.                         If .MoveWhile(ksr, x) = x Then
  19.                             .MoveStart , -x: .Text = Empty
  20.                             .Style = ActiveDocument.Styles("" & b(j) & "")
  21.                         Else
  22.                             .Move 4, 1
  23.                         End If
  24.                     End If
  25.                 End With
  26.             Loop
  27.            ActiveDocument.content.ListFormat.ConvertNumbersToText
  28.         End With
  29.     Next
  30. End Sub

  31. Sub ListTitle(doc As Document)
  32.     Dim LtTemp As ListTemplate, i As Integer, a
  33.     Set LtTemp = doc.ListTemplates.Add(True)
  34.     a = Array(6, 5, 2, 11)
  35.     For i = 2 To 5
  36.         With LtTemp.ListLevels(i)
  37.             If i = 2 Then .NumberFormat = "%2、": .NumberStyle = 37
  38.             If i = 3 Then .NumberFormat = "(%3)": .NumberStyle = 37
  39.             If i = 4 Then .NumberFormat = "%4.": .NumberStyle = 0
  40.             If i = 5 Then .NumberFormat = "(%5)": .NumberStyle = 0
  41.            .TrailingCharacter = 2: .StartAt = 1: .ResetOnHigher = True
  42.             .NumberPosition = InchesToPoints(0.2 * (i - 1))
  43.             .TextPosition = InchesToPoints(0.2 * i)
  44.             .LinkedStyle = "标题 " & i
  45.             doc.Styles("标题 " & i).Font.ColorIndex = a(i - 2)
  46.           doc.Fields.Update
  47.           doc.Fields.Unlink
  48.         End With
  49.         Next
  50. End Sub
复制代码






TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-22 14:13 | 显示全部楼层
翼★虎:我昨晚重新为你做了一个新的《Title2345AutoNum》宏(包括处理标题2/3时用新编《Num2Chn》宏,共2个宏),这回用的是翻译法,直接把“1”等翻译为“一”等,最大适用值是999(九百九十九),与 Word 版本无关了,不再删除域,应该可以了,你试试(将光标放在 VBE 中原来的《Title2345AutoNum》宏中双击,按删除键Delete删除,粘贴上新宏):
  1. Sub Title2345AutoNum()
  2.     Dim doc As Document, r As Range, i As Paragraph, b&, c&, d&, e&
  3.     Set doc = ActiveDocument
  4.     With Selection
  5.         .Expand 4
  6.         .EndKey 6, 1
  7.         Set r = .Range
  8.     End With
  9.     For Each i In r.Paragraphs
  10.         With i.Range
  11.             If Not .Information(12) Then
  12.                 If .Style = "标题 1" Or .Text Like "[!^13]附件*" Or .Text Like "附件*" Then
  13.                     b = 0: c = 0: d = 0: e = 0
  14.                 ElseIf .Style = "标题 2" Then
  15.                     c = 0: d = 0: e = 0
  16.                     b = b + 1
  17.                     With doc.Range(Start:=.Characters(1).Start, End:=.Characters(InStr(i.Range, "、")).End - 1)
  18.                         .Text = b
  19.                         .Select
  20.                         Num2Chn
  21.                     End With
  22.                 ElseIf .Style = "标题 3" Then
  23.                     d = 0: e = 0
  24.                     c = c + 1
  25.                     With doc.Range(Start:=.Characters(1).Start, End:=.Characters(InStr(i.Range, ")")).End - 1)
  26.                         .Text = c
  27.                         .Select
  28.                         Num2Chn
  29.                         .InsertBefore Text:="("
  30.                     End With
  31.                 ElseIf .Style = "标题 4" Then
  32.                     e = 0
  33.                     d = d + 1
  34.                     doc.Range(Start:=.Characters(1).Start, End:=.Characters(InStr(i.Range, ".")).End - 1).Text = d
  35.                 ElseIf .Style = "标题 5" Then
  36.                     e = e + 1
  37.                     With doc.Range(Start:=.Characters(1).Start, End:=.Characters(InStr(i.Range, ")")).End - 1)
  38.                         .Text = e
  39.                         .InsertBefore Text:="("
  40.                     End With
  41.                 End If
  42.             End If
  43.         End With
  44.     Next
  45. End Sub
  46. Sub Num2Chn()
  47.     Dim a, r As Range, v&, i&
  48.     a = Array("零", "一", "二", "三", "四", "五", "六", "七", "八", "九")
  49.     With Selection
  50.         Set r = .Range
  51.         v = Len(.Text)
  52.         If v > 3 Then Exit Sub
  53.         With r
  54.             For i = 1 To v
  55.                 .Characters(i).Text = a(.Characters(i))
  56.             Next i
  57.             If .Next.Text = "零" Then .Next.Delete
  58.             If v = 2 Then
  59.                 .InsertAfter Text:="十"
  60.                 If .Characters(1).Text = "一" Then .Characters(1).Delete
  61.             ElseIf v = 3 Then
  62.                 .Characters(1).InsertAfter Text:="百"
  63.                 .InsertAfter Text:="十"
  64.                 .Select
  65.                 If .Text Like "*百零十" Then
  66.                     If .Next Like "[一二三四五六七八九]" Then
  67.                         .Characters.Last.Delete
  68.                     Else
  69.                         .Text = Replace(.Text, "零十", "")
  70.                     End If
  71.                 End If
  72.             End If
  73.         End With
  74.     End With
  75. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2019-1-22 17:52 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
413191246se 老师好,我按你的最新思路,解决了中文标题及后被删除问题。当原始段落为word编号文件时候,利用《Title2345AutoNum》宏排序时候,原序号不会删除,同时生成新的序号。会出现(1.1.XX;2.2.XX;)(一、一、XX;二、二、.XX;),希望老师在闲暇之余测试下。谢谢。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-22 23:28 | 显示全部楼层
翼★虎:请你暂时先用 76 楼代码测试文档;但 75 楼代码不要用了!因为,杜先生/老师(duquancai)他的正则表达式代码是有问题的!不能用!!!——要不我为什么不用他的代码呢?确实是有问题,影响排版效果。我不会对任何人有偏见而不用他的代码,我只针对代码是否能正确排版。——你不用上传附件了,上传我可能也下载出错,你只需将一些文字复制上来,我下载试试吧!因为我只针对公文四个层次进行排版,关于多级编号这个问题,我因为从来也用不到,所以,也从来没有进行过排版测试。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-23 01:00 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-1-23 09:10 | 显示全部楼层
413191246se 老师好,76楼代码进行文本排版没有问题,谢谢。如果复制源文件中有多级编号时候就会出现标题重复问题。

TA的精华主题

TA的得分主题

发表于 2019-1-23 10:51 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
标记,学习
多谢

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-23 12:00 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
翼★虎:如果你有多级编号的文本示例,可以复制上来,我不太懂多级编号。——另外,其实,公文排版,似乎是用不到多级编号的。当然广义上来说,是什么文档都能排版。——有问题咱们继续探讨。

TA的精华主题

TA的得分主题

发表于 2019-1-23 14:12 | 显示全部楼层
413191246se  老师好,我拿你的《如何判断公文标题层次序号是连续》范文,生成多级编号。做下测试。你试试看能否正常打开。谢谢。

如何判断公文标题层次序号是连续.rar

15.87 KB, 下载次数: 16

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-24 04:51 , Processed in 0.033898 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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