ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] 公文标题连续编号(宏)

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-5-26 11:09 | 显示全部楼层
——杜先生 辛苦了! 太感谢了! 大功告成!
——原代码出现编译错误,开始也没认真思考。就是倒数第二句 .ApplyListTemplateWithLevel 属性错误,试着从前一属性写代码,即 p.ListFormat.ApplyListTemplate ListGalleries(3).ListTemplates(1),运行 OK!这可能是因为我的 2003 和 杜先生的 2007 版本不同所以语言不同的缘故吧!
——接下来,我要把这个宏放在《公文》宏最后面,作为补丁,再辅之以把左缩进变为 0,再把自动编码变成齐线墨点,就完全 OK 了!
——原来我想用《循环遍历段落法》来连续编号这四个层次,但感觉很复杂,现在 杜先生 用添加内置样式的方法,很简洁、干净、利索,样式不太懂,不太会。
——谢谢 杜先生! 我今后再也不用目视数标题层次是否连续了!也不用看《文档结构图》了!对 杜先生 的感激之情无以言表,只好请 杜先生 注意好好休息,别累着……

TA的精华主题

TA的得分主题

发表于 2017-5-26 11:33 来自手机 | 显示全部楼层
本帖最后由 duquancai 于 2017-5-26 12:01 编辑
413191246se 发表于 2017-5-26 11:09
——杜先生 辛苦了! 太感谢了! 大功告成!
——原代码出现编译错误,开始也没认真思考。就是倒数第二句  ...

解决你这个问题最佳方案就是 自定义多级列表样式关联内置标题样式。但是前提条件是:对word强大的样式概念要精通,尤其是解决标题及编号,以及自动目录,快速的排版,word样式是基础,也是强大的,非常重要的东东。用好了事半功倍!!!

TA的精华主题

TA的得分主题

发表于 2017-5-26 11:43 | 显示全部楼层
413191246se 发表于 2017-5-26 11:09
——杜先生 辛苦了! 太感谢了! 大功告成!
——原代码出现编译错误,开始也没认真思考。就是倒数第二句  ...

Sub 自定义多级列表_关联内置标题样式()
'    说明:1.由于本帖附件已经具有了内置标题样式,所以代码如下
'           2.如果没有内置标题样式,可以先自定义多级列表_关联内置标题样式后再查找标题“并应用此自定义样式”
    Dim doc As Document
    Set doc = ActiveDocument
    sr$ = "〇一二三四五六七八九十百千万亿"
    r1$ = "^13[" & sr & "]@、": r2$ = "^13[((][" & sr & "]@[))]"
    r3$ = "^13[0-9]@[、..]": r4$ = "^13[((][0-9]@[))]"
    With doc.Content.Find
        .Execute "^11", , , 1, , , , , , "^p", 2
        .Execute "^p^w", , , 0, , , , , , "^p", 2
        .Execute r1, , , 1, , , , , , "^p", 2
        .Execute r2, , , 1, , , , , , "^p", 2
        .Execute r3, , , 1, , , , , , "^p", 2
        .Execute r4, , , 1, , , , , , "^p", 2
    End With
    With ListGalleries(3).ListTemplates(1)
        .ListLevels(2).NumberFormat = "%2、": .ListLevels(2).NumberStyle = 37
        .ListLevels(3).NumberFormat = "(%3)": .ListLevels(3).NumberStyle = 37
        .ListLevels(4).NumberFormat = "%4.": .ListLevels(4).NumberStyle = 0
        .ListLevels(5).NumberFormat = "(%5)": .ListLevels(5).NumberStyle = 0
    End With
    For i = 2 To 5
        With ListGalleries(3).ListTemplates(1).ListLevels(i)
            .TrailingCharacter = 2: .StartAt = 1: .ResetOnHigher = True
            .LinkedStyle = "标题 " & i
        End With
    Next
    doc.Content.InsertAfter Chr(13)
    With doc.Range(doc.Content.End - 1, doc.Content.End - 1)
        .ListFormat.ApplyListTemplate ListGalleries(3).ListTemplates(1): .Delete
    End With
End Sub

TA的精华主题

TA的得分主题

发表于 2017-5-26 12:28 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
对杜老师的代码,每个都认真学习

TA的精华主题

TA的得分主题

发表于 2017-5-26 12:56 | 显示全部楼层
413191246se 发表于 2017-5-26 11:09
——杜先生 辛苦了! 太感谢了! 大功告成!
——原代码出现编译错误,开始也没认真思考。就是倒数第二句  ...

"作为补丁"?这样不好吧!不好意思,你的自动化排版,我至今没有下载看过。我给你一点建议:
对于自动化排版,尤其是公文:你的编程流程应该好好思考,也就是排版流程应该是这样的:
第一大步骤:首先最基础的工作(不是作为补丁)也是非常重要的工作,然而绝大多数人都没有做这个工作,那就是:预设好 多级列表标题,预设好正文样式(注意:应该新建一个另外的自定义的正文样式。)。
其次第二大步骤才是 :1.对全文进行自己之前定义好的正文样式。2.对文档的标题进行查找,在查找的过程中运用之前预设的多级列表带标题的样式。
简单说就是这样吧!

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-5-26 20:17 | 显示全部楼层
——杜先生 说得极是!!!
——无奈,我对多级标题列表根本不懂,样式稍微知道一点,水平实在太低。会录制宏多年,但真正会编辑宏还是2011年7月间的事情。因为对样式不懂、不明白,所以,只是想用宏一键把所有正文、标题样式都设置完毕,自定义样式这个确实没有想过。过去用 Word95,即 7.0 时也曾经自定义过空白模板 Normal.dot,后来还是觉得用宏快速、省事。
——经 杜先生 这么一说,我也觉得我心中所谓的《自动排版》其实很差劲,因为更高级的应用,如脚注、题注、多级列表、修订、比较……这些根本不懂,也用不上;还有,排版流程是不是科学,也根本谈不上。

TA的精华主题

TA的得分主题

发表于 2017-5-26 20:39 | 显示全部楼层
本帖最后由 duquancai 于 2017-5-26 20:41 编辑
413191246se 发表于 2017-5-26 20:17
——杜先生 说得极是!!!
——无奈,我对多级标题列表根本不懂,样式稍微知道一点,水平实在太低。会录 ...

我的意思是:在你前面的有个贴
http://club.excelhome.net/thread-1346099-1-2.html
这个贴中,在查找设置4个层级 之前 就预设好多级列表带标题的样式(按照公文要求设置)。在查找设置标题是时候 直接就运用预设好的样式了!这样一气呵成啊!

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-5-26 21:32 | 显示全部楼层
本帖最后由 413191246se 于 2017-5-26 21:37 编辑

杜先生:
——自定义样式也许是个很好的排版方式,但它势必会将设置保存于空白通用模板 Normal.dot 中;
——而我现在只喜欢用宏代码动态地自动排版一键搞定,只须保留 NewMacros.bas 备份,随时导入即可;
——杜先生 今天的代码和昨晚的代码效果似乎一样,但我想选用昨晚的代码,因为已经达到目的;
——更高级的WORD应用,我不敢奢求了,也许永远用不到,那是像 杜先生 和 龚先生(CuteWord) 这样的大神才能办到的事;现在我每每私下以“业余程序员”自居,虽然水平很低,但喜欢编程,热爱编程,有苦也有乐,乐在其中,知足常乐。

TA的精华主题

TA的得分主题

发表于 2017-5-26 22:37 | 显示全部楼层
413191246se 发表于 2017-5-26 21:32
杜先生:
——自定义样式也许是个很好的排版方式,但它势必会将设置保存于空白通用模板 Normal.dot 中;
...

以此为准,同时解决本帖及以前的贴   请测试!!!
  1. Sub 四种标题层次设置_设置样式()
  2.     Dim a, b, j&, ksr$, x&
  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.         End With
  28.     Next
  29. End Sub
  30. Sub ListTitle(doc As Document)
  31.     Dim LtTemp As ListTemplate, i As Integer, a
  32.     Set LtTemp = doc.ListTemplates.Add(True)
  33.     a = Array(6, 5, 2, 11)
  34.     For i = 2 To 5
  35.         With LtTemp.ListLevels(i)
  36.             If i = 2 Then .NumberFormat = "%2、": .NumberStyle = 37
  37.             If i = 3 Then .NumberFormat = "(%3)": .NumberStyle = 37
  38.             If i = 4 Then .NumberFormat = "%4.": .NumberStyle = 0
  39.             If i = 5 Then .NumberFormat = "(%5)": .NumberStyle = 0
  40.             .TrailingCharacter = 2: .StartAt = 1: .ResetOnHigher = True
  41.             .NumberPosition = InchesToPoints(0.2 * (i - 1))
  42.             .TextPosition = InchesToPoints(0.2 * i)
  43.             .LinkedStyle = "标题 " & i
  44.             doc.Styles("标题 " & i).Font.ColorIndex = a(i - 2)
  45.         End With
  46.     Next
  47. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-5-27 15:51 | 显示全部楼层
——杜先生:辛苦了!楼上代码运行OK!但我发现它似乎不是正则表达式,好像速度不快吧?不太懂。
——我把我对公文的排版顺序写成一个宏,并非是在 杜先生 面前显摆,仅仅是为了说明我对排版的流程理解,请 杜先生 综合考虑重新写一个集成代码(最好用《正则表达式》,我觉得还是那个快),主要解决 标题 2/3/4/5/正文 的自动判断,并将标题 2/3/4/5 的序号使之自动连续编号,省得我每次都要目视读校,其它注释的小宏请不必写代码。
——杜先生 前几天的《公文标题四个层次--正则表达式》那个代码,有就是有函数的那个,我看先是处理一遍所有段落(表格除外)设置为正文样式后再设置各个标题样式,我觉得是否可以对某一个段落处理时,直接判断,如果是 标题 2/3/4/5,则设置之;否则当正文处理(正文就是仿宋三号16磅首行缩进2字符)。
——最近几天,我也学会了 杜先生 的变量简写,如:Dim i$, j& 我主要用这两种变量,这种写法太好了,简洁,字节还少。
——谢谢 杜先生,请注意休息……
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-12 21:53 , Processed in 0.024770 second(s), 5 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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