Win Word:从标题中剪切所有文本框,修改页面设置,然后再次粘贴

问题描述 投票:0回答:1

我正在尝试将新的公司品牌设计应用于现有文档模板以供将来使用。它工作得相当好,但许多文档模板目前只有一页,因此所有页面上带有页眉和页脚的整页背景图像都是相同的,这可能工作得很好,但我想为它们突然变得比一页长的情况做好准备。然后,我不需要标题包含窗口信封的地址字段,因此我需要将文档转换为具有不同的首页。

如果通过页面设置激活此功能,页眉的所有内容(仅是除整页背景图像之外的文本框)将移动到不存在的第二页,并且新的第一页页眉为空。

我的解决方法是选择所有文本框,将它们剪切或复制到剪贴板,转换标题,然后将剪贴板中的内容粘贴回新的首页标题上。

这样,第二页+页面就干净了,第一页保持不变。我已经运行了该程序,直到我关闭了所有 word 实例以重新测试宏,现在我在设置第一页不同时收到“运行时错误 4198 命令失败”,但我认为这更有可能是由 Selection.Cut 引起的之前或 Word 完全崩溃。

Sub ConvertToFirstPageDifferent()
'
' Converts document to First Page Different and prevents Headers on the first Page from being lost.
'
'

    Dim Sh As Shape
    For Each Sh In ActiveDocument.Sections.Item(1).Headers(wdHeaderFooterPrimary).Shapes
        If Sh.Type = 17 Then Sh.Select False
    Next

    Selection.Cut
    ActiveDocument.PageSetup.DifferentFirstPageHeaderFooter = True
    ActiveDocument.Sections.Item(1).Headers(wdHeaderFooterFirstPage).Range.Paste

End Sub

调试器抱怨

ActiveDocument.PageSetup.DifferentFirstPageHeaderFooter = True

现在在网上浏览示例时,我经常读到范围优于选择,但我无法找到如何使用范围来仅选择某些对象。

问题是什么?我怎样才能以不同的方式保留这些文本框?

vba ms-word shapes copy-paste
1个回答
0
投票

您所需要的只是:

Sub Demo()
With ActiveDocument.Sections.First
  .PageSetup.DifferentFirstPageHeaderFooter = True
  .Headers(wdHeaderFooterFirstPage).Range.FormattedText = .Headers(wdHeaderFooterPrimary).Range.FormattedText
  .Headers(wdHeaderFooterFirstPage).Range.Characters.Last.Previous.Delete
  .Headers(wdHeaderFooterPrimary).Range.Text = vbNullString
End With
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.