ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创]多节文档中第*页共*页第*节本节第*页本节共*页

[复制链接]

TA的精华主题

TA的得分主题

发表于 2005-11-11 17:27 | 显示全部楼层 |阅读模式
说明: WORD中的多节节数指定,一直是多年来的心病,这次终于下定决心研究了一下,但愿能解决问题。

一:我未对此作更多的测试,请有需求者测试后即时反馈于我。

二:这是一个VBA与域相结合的程序,你可以将这段代码直接复制于你的文档中,然后运行

1.建议在全档全部结束后,当然,你可以随时运行,最终的页眉中的调整应该放在全部成稿后,你可以复制部分域代码在页脚中或者你认为需要的地方.如果是页脚中,请关闭同前按钮

2.如果你需要设置页眉样式,请在最终成稿后设置,或者,节数不会增加的情况下进行设置

3.本节中的内容增删,无需运行宏,它会自动生成;运行宏只是在你的文档需要增加节时起作用,它会删除原来所有的页眉中的内容.

4.本程序的原理是按照域中的运算\书签域和书签域所在页数进行的,如果你想不用VBA,可以参考里面的域代码公式进行手动设置书签.

核心域代码为: 总第{ PAGE }页共{ NUMPAGES }页第{ SECTION }节 ,本节第{ ={ PAGE }-{ PAGEREF myBK_S1 }+1 }页, 本节共{ SECTIONPAGES }页

其中myBK-S*是个变量 '* +++++++++++++++++++++++++++++ '* Created By I Love You_Word!@ExcelHome 2005-11-11 17:20:36 '仅测试于System: Windows NT Word: 10.0 Language: 2052 '№ 00050^The Code CopyIn [ThisDocument-ThisDocument]^' '* -----------------------------

Option Explicit Sub AllPages() Dim i As Section, myRange As Range, myBk As Bookmark, strBk As String Dim KeyRange As Range, BtLenth As Byte On Error Resume Next With ActiveDocument If .Sections.Count = 1 Then Exit Sub Application.ScreenUpdating = False For Each myBk In .Bookmarks If VBA.InStr(myBk.Name, "myBK_S") = 1 Then myBk.Delete Next For Each i In .Sections Set myRange = .Range(i.Range.Start, i.Range.Start) strBk = "myBK_S" & i.Index BtLenth = Len(strBk) .Bookmarks.Add strBk, myRange With i.Headers(wdHeaderFooterPrimary) Set KeyRange = .Range .LinkToPrevious = False .Range.Text = "总第PAGE页共NUMPAGES页" & Chr(13) & "第SECTION节 ,本节第=PAGE-PAGEREF " & strBk & "+1页, 本节共SECTIONPAGES页" Set KeyRange = .Range KeyRange.SetRange KeyRange.Start + 38, KeyRange.Start + 38 + 8 + BtLenth KeyRange.Fields.Add KeyRange, wdFieldEmpty, , False Set KeyRange = .Range KeyRange.SetRange KeyRange.Start + 33, KeyRange.Start + 37 KeyRange.Fields.Add KeyRange, wdFieldEmpty, , False Set KeyRange = .Range KeyRange.SetRange KeyRange.Start + 32, KeyRange.End - 20 KeyRange.Fields.Add KeyRange, wdFieldEmpty, , False Set KeyRange = .Range KeyRange.SetRange KeyRange.End - 14, KeyRange.End - 2 KeyRange.Fields.Add KeyRange, wdFieldEmpty, , False Set KeyRange = .Range KeyRange.SetRange KeyRange.Start + 19, KeyRange.Start + 26 KeyRange.Fields.Add KeyRange, wdFieldEmpty, , False Set KeyRange = .Range KeyRange.SetRange KeyRange.Start + 8, KeyRange.Start + 16 KeyRange.Fields.Add KeyRange, wdFieldEmpty, , False Set KeyRange = .Range KeyRange.SetRange KeyRange.Start + 2, KeyRange.Start + 6 KeyRange.Fields.Add KeyRange, wdFieldEmpty, , False .Range.Fields.Update End With Next End With Application.ScreenUpdating = True End Sub '----------------------

qjTQnZsS.zip (20.59 KB, 下载次数: 200)

[此贴子已经被作者于2005-11-11 17:31:54编辑过]

TA的精华主题

TA的得分主题

发表于 2005-11-11 17:57 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
老大的东东,不管怎样。顶了再说。

TA的精华主题

TA的得分主题

发表于 2005-11-11 18:15 | 显示全部楼层
报告老大运行结果: 运行一切正常,有一点不知能否改进,就是全选删除内容后,页眉上会出现“第1节 ,本节第!未定义的书签,错误!未定义书签。页, 本节共1页”,

再运行一个次宏也是这样。

[此贴子已经被作者于2005-11-11 18:17:36编辑过]

TA的精华主题

TA的得分主题

发表于 2005-11-11 18:21 | 显示全部楼层

标题正是我所需要的,运行怎么样随后报上。

感谢守柔。

TA的精华主题

TA的得分主题

 楼主| 发表于 2005-11-11 19:59 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
以下是引用konggs在2005-11-11 18:15:35的发言: 报告老大运行结果: 运行一切正常,有一点不知能否改进,就是全选删除内容后,页眉上会出现“第1节 ,本节第!未定义的书签,错误!未定义书签。页, 本节共1页”,

再运行一个次宏也是这样。

这正是正常的结果,原因是书签被删除了,正如常规域一样,如果没有引用对象,则域会出错,这是正常WORD自身的结果。

谢谢,请再测试。

TA的精华主题

TA的得分主题

发表于 2005-11-15 10:41 | 显示全部楼层

为什么迟迟不敢递交测试报告?技不如人,怕有话说不透。最近太忙,都快忘了代码贴哪儿才能运行了。

看到守柔老师所写程序的当天,我已经进行了测试。质量认证工作涉及的行业、部门太多,国家质监总局下属的国家认监委出手的贯标手册版式基本一致,页眉部分是一个3×3的表格,一如我在【求助】关于页码和目录的三个问题帖中所示。再次贴出:

需要动态控制的代码有:

章节号:亦即节号,但要减去封面、封二、修改控制页、目录等部分所占用的节号,第一章从第一节算起;

节页码

节页数

总页码:与章节号同,第一章从第1页起,后面页依次递加。

总页数等内容不需要显示。

本想对守柔的代码进行调控,但又无能为力,只能如实相告了。

总体评价:代码运行结果完全正确,但与贯标手册的制作要求有一定的差距。如能与【求助】关于页码和目录的三个问题相衔接,基本可以解决认证手册中的问题了。

[此贴子已经被作者于2005-11-15 12:44:24编辑过]

TA的精华主题

TA的得分主题

发表于 2007-2-11 21:15 | 显示全部楼层
在页眉中的某一段文字,比如文章或章节的题目,该题目是引用正文题目书签。于是发现:页数域可以自动更新,第x页,共x页。但页眉中的这一段文字非但不能自动更新,全选后点F9也不行。只能双击激活页眉编辑状态,在该段文字上更新域才行。

TA的精华主题

TA的得分主题

发表于 2007-2-11 23:25 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

一般用打印预览也可更新

TA的精华主题

TA的得分主题

发表于 2007-2-11 23:33 | 显示全部楼层

是呀,目前认为是最彻底的更新方法了.

如何把书签和域引用批量转换为结果希望斑竹作段代码。

ctrl+shift+f9有点太费劲。

TA的精华主题

TA的得分主题

发表于 2007-2-14 14:20 | 显示全部楼层

看起来非常有用!

顺便问一下,为什么我用插入“第几页共几页”时,第一页打印会出现“第1页共1页”,第二页打印会出现“第2页共2页”,第三页打印会出现“第3页共3页”,依次类推。而在word的正文页面看上去编号还是好好的。既便是形成pdf文档,也会出现这个问题。

每次我只有预览到最后一页,然后再按打印,页码才不会出错。

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

本版积分规则

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

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

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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