ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] word域代码插入页码。要求既有当前节第几页,又有文档的第几页

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-10-2 23:56 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
413191246se 发表于 2022-10-2 20:35
* sylun 兄:国庆节快乐!辛苦了!——昨天,录制了第一节的域代码,折腾一会儿成功了。今天,又录制了第二 ...

se兄节日快乐!大概看了一下se兄的截图,似乎是书签名与其信息值间少了个空格。域代码中的空格运用是很讲究的,是其重要的逻辑表达格式。九楼的起始节的域代码意思是在该节页眉或页脚设置一个书签(书签名为sec+节编号),并使该书签的信息值为该节的总页数,再显示该节页码。之后其他节的域代码的意思是同样插入一书签(命名格式与前一节相同),信息值为前一节的书签值加上本节总页数。这样就实现了各节页码总数依次累加,再加上本节内页码就是本节的动态总页码。最后插入该节内动态总页码(域公式)。通常在能使用域的场合就较少考虑用宏。

TA的精华主题

TA的得分主题

发表于 2022-10-3 11:50 | 显示全部楼层
本帖最后由 413191246se 于 2022-10-3 12:23 编辑

* sylun 兄,你的回复已经下载保存,待有时间我再看看,可能是因为空格的缘故,第二节的域代码报错。
   
* 昨晚,我因为(以前就读过,下载好几回,又删除了)重新下载了《DOOM启示录》CHM 格式,我想要 TXT 格式的(没有下载到),我就逐章手动复制粘贴到 WORD 中。想排排版,就用到了我的《条文排版》宏,发现“段后一行”这种形式,如果转换为纯文本的话,每个段落之间是紧挨着的,不如网文都是以空段来分隔的,就重新审视了一下《条文排版》宏,又折腾、精简了半天《第一章》宏。——我现在就想,宏不能没有,但不想要太多,想精简一些宏。特别是,公文自动排版 宏,想尽量实现 极速排版。
   
* 前几天,还有 151 个宏,昨晚发现,剩 119 个 了;我还想尽量使 NewMacros.bas 文件小于 100kb,就是不大于 99kb,最近一直在努力精简代码。昨晚排版《DOOM启示录》,413页文字,用了 11.75 秒!感觉太慢了!刚才又测试一下,反而更慢了,12.04 秒!
   
* sylun 兄:如果有时间,有兴趣的话,可否给我的代码指点指点,如何提速?(公文排版宏 Official、普通排版宏 Ordinary、条文排版宏 Provision)
   
* 下面的代码是我所有的代码,仅供 sylun 兄参考(水平太低,让 兄 见笑了!)。不建议其他朋友下载,因为未完成,排版效果不佳。
[NewMacros-Word2003-OK-1003-02h39m-Copy.rar (20.24 KB, 下载次数: 15)

TA的精华主题

TA的得分主题

发表于 2022-10-3 13:03 | 显示全部楼层
sylun 兄:请将下面的小文件(快捷访问工具栏自定义)拷贝到你电脑上的文件夹
C:\Users\Lenovo\AppData\Local\Microsoft\Office
中覆盖原文件,方便调试文档,配合“FinalDoc/CloseNotSave/Reopen”三个小宏(我的系统与你的相同)。
Word2019officeUI.rar (761 Bytes, 下载次数: 10)

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-10-4 13:13 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
413191246se 发表于 2022-9-23 23:48
* 楼主,经过最近几天反复思考,问题就出在两个“PAGE”域上!改一个另一个也自动更改,最后,我决定还是从 ...

测试后,没有问题。而且,在某节的中间新插入(或删除)页后,页码也可以自动更新,不用重新运行宏。

TA的精华主题

TA的得分主题

发表于 2022-10-4 19:09 | 显示全部楼层
楼主,但我在我的电脑上测试,要重新运行宏才行(Word2019)。现在可行的就暂时是 5 楼代码了,要是不自动更新,再运行一次宏就可以了。sylun 老师 的方法,我还未实践成真。还好,不影响打印和保存。

TA的精华主题

TA的得分主题

发表于 2022-10-6 17:01 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
413191246se 发表于 2022-10-4 19:09
楼主,但我在我的电脑上测试,要重新运行宏才行(Word2019)。现在可行的就暂时是 5 楼代码了,要是不自动 ...

可试试如下代码,其实是依据手工编写的域代码再编写宏代码的,插入嵌套域操作比较繁琐。
  1. Sub test2()
  2.     '同时显示节内页码和文档总页码,仅适用于每节均重新起始页码时
  3.     Dim i%, n%, aStart0&, codetext1$, codetext2$
  4.     Dim aCharnum, codetext0, aStart1, aStart2, aEnd1, aEnd2
  5.     Dim aSec As Section
  6.     Dim aFooterRange As Range
  7.     Dim aField As Field
  8.    
  9.     aCharnum = Array(17, 13, 8, 4)
  10.     codetext0 = Array("numpages", "quote", "sectionpages", "page")
  11.     aStart1 = Array(63, -13, -4, 12)
  12.     aEnd1 = Array(75, -1, 28, 19)
  13.     aStart2 = Array(119, -27, 3, 6, 15, -40, -17, 3, 6, 3, -29, 10)
  14.     aEnd2 = Array(123, 6, 15, 13, 27, -28, 16, 18, 16, 10, 37, 17)
  15.     codetext1 = "set ""secsection"" sectionpages"
  16.     codetext2 = "set ""secsection"" =""sec=section-1""+sectionpages=""secsection""-sectionpages+page"
  17.    
  18.     Application.ScreenUpdating = True
  19.     ActiveWindow.View.ShowFieldCodes = True
  20.     ActiveDocument.ActiveWindow.View.Type = wdPrintPreview
  21.     ActiveDocument.ActiveWindow.View.SeekView = wdSeekPrimaryFooter
  22.     For Each aSec In ActiveDocument.Sections
  23.         i = i + 1
  24.         aSec.Footers(wdHeaderFooterPrimary).LinkToPrevious = False
  25.         With aSec.Footers(wdHeaderFooterPrimary).Range
  26.             .Text = "节内第x页,共y页。总第m页,共n页"
  27.             For n = 0 To 3
  28.                 .Fields.Add .Characters(aCharnum(n)), , codetext0(n), False
  29.             Next
  30.             aStart0 = .Fields(3).Code.Start + 7
  31.             
  32.             If i = 1 Then
  33.                 .Fields(3).Code.InsertAfter codetext1
  34.                 For n = 0 To UBound(aStart1)
  35.                     .SetRange .Start + aStart1(n), .Start + aEnd1(n)
  36.                     .Select
  37.                     Application.Run "InsertFieldChars"
  38.                 Next
  39.                 .MoveUntil "页"
  40.                 .Fields.Add .Duplicate, wdFieldPage, , False
  41.             ElseIf i = 2 Then
  42.                 .Fields(3).Code.InsertAfter codetext2
  43.                 For n = 0 To UBound(aStart2)
  44.                     .SetRange .Start + aStart2(n), .Start + aEnd2(n)
  45.                     .Select
  46.                     Application.Run "InsertFieldChars"
  47.                 Next
  48.                 .Expand wdStory
  49.                 For Each aField In .Fields
  50.                     aField.Code.Characters.First.Delete
  51.                     If aField.Code.Characters.Last = Chr(32) Then aField.Code.Characters.Last.Delete
  52.                 Next
  53.                 Set aFooterRange = .FormattedText
  54.             Else
  55.                 .FormattedText = aFooterRange
  56.             End If
  57.             .ParagraphFormat.Alignment = wdAlignParagraphCenter
  58.         End With
  59.     Next
  60.     ActiveWindow.View.ShowFieldCodes = False
  61.     ActiveDocument.ActiveWindow.View.SeekView = wdSeekMainDocument
  62.     Application.ScreenUpdating = True
  63.     MsgBox "处理完毕!", vbInformation
  64. End Sub
复制代码


se兄前面的文件中因宏太多,总体思路也不明,实在看不过来,十分抱歉。我觉得,如果主要是为了处理机关公文文档,可自行制作一个专用模板,再在模板中处理。有了模板,编辑公文文档时需要临时调整的事项就不会特别多。我平时不是专门做文档处理的,编程只是业余爱好,所以我的WORD编辑界面只添加了几个内置按钮和几个常用的自定义宏按钮,其余基本不动,很少用自定义快捷键或操作自定义功能区。
Range的Duplicate属性返回一个只读的Range对象,是原Range对象的独立复本。另外,当在With语句中要引用父对象Range时,也可用Duplicate属性代替,进行二次操作时其边界可独立引用。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-10-6 23:41 | 显示全部楼层
* sylun 兄:楼上代码未测试,有时间再说吧!
* 如果自己撰写公文,用自己的模板,当然是方便的。但是,如果是别人撰写的公文,各有各的电脑系统(不同版本的 Office),那模板恐怕就没用了。
*“.Duplicate”属性没用过,前些天,我重编“附件”宏时,这样用“Set c=r”,我想,也相当于“c=r.Duplicate”了。
* 我的那些宏,比较繁杂,都不舍得删除,对 兄 来说可能就几乎无用了,就请别费精力了,好好休息!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-28 12:32 , Processed in 0.040360 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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