使用vba宏/python代码更新word目录——只更新页码

使用vba宏/python代码更新word目录——只更新页码

工作中出现了如题的需求。实际上这个操作人工的话只需要右键区域→更新域→选择只更新页码然后确定就行了。不过工作需求就是得用代码去完成以上事情。

这个问题的主体部分就是找到相关的代码……实际上关于这一点网上已有不少教程,比如这一篇就实际上作为原型让我写出了我实际使用的代码:

Sub UpdateContent()
  Dim i As Integer
  i=0
  Dim aStory As Range
  Dim aField As Field
     For Each aStory In ActiveDocument.StoryRanges
        For Each aField In aStory.Fields
           If i<4 Then:
              aField.Update
              i=i+1
        Next aField
     Next aStory
End Sub

注意i相关的操作是我自己加的,因为我只想刷新目录,所以不需要真的遍历全部域。

本来问题到这里就该解决了,我成功在自己电脑上跑通了这个程序,第二天拿到工作的地方……

然后发现他们只有WPS。

WPS也是有宏功能的。这没问题。
问题在于,这一段代码在WPS中运行的表现是“更新整个目录”而不是默认的“只更新页码”。
而录制宏录下来的是一句“…Field.ShowCode=False”,牛头不对马嘴,而且确实没有效果。

找了很久最后找了wps的技术客服,然后得到解决办法了:

Sub UpdateContent()
  Dim aStory As Range
  Dim aField As Field
     For Each aStory In ActiveDocument.StoryRanges
        For Each aField In aStory.Fields
           if aField.Type == 37:
              aField.Update
        Next aField
     Next aStory
End Sub

页码本身也是域,然后类型标识是37,所以只要这么指定就会只更新页码了。

说真的,这个操作不看手册真的八辈子都想不出。而VBA里面那个帮助文档简直就和不存在差不多。
不过最后还是在MSDN上找到类型标识的列表了。这里是链接

不过话说回来,虽然问题是解决了哈……
那为啥word里面之前那段代码就是只更新页码呢……
而且我后面的代码在调试中发现进了if的次数有100多次之多,基本上就是一半不到一点点的field数(大概一半是标题一半是页码),但前面的代码我显然只跑了前4个field……两个程序对同一文件处理的运行速度也是天差地别。

如果说word中我是update了靠前的、目录整体的大框架,而这个update默认更新的是页码……那在word中又要如何更新整个目录呢?(顺带一提word中去掉i<4的限制也是只更新页码,虽然用时会飙升)

(这和python又有啥关系?请见另一篇文章(这算引流吗))

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值