在 word 模板的第二页插入页眉,而第二页尚不存在

Posted

技术标签:

【中文标题】在 word 模板的第二页插入页眉,而第二页尚不存在【英文标题】:Insert header on second page of a word template, while the second page doesn't exist yet 【发布时间】:2022-01-17 03:45:15 【问题描述】:

我需要创建一个 Word 模板,它会动态地将徽标添加到信函的标题中。为了简化用户体验,原始模板仅生成一页。 流程是这样的:

    用户通过 Word 中的“文档>新建”打开模板 用户可以通过用户窗体在不同的公司和徽标之间进行选择 根据选择的公司/徽标,在信中添加不同的内容

我确实有一个限制,第一页的页脚与第二页以后的页脚不同。

这意味着,当我通过 VBA 代码在第一页的页眉中添加图片并添加文本(或只是空白)时,徽标不会重复。

所以基本上我的问题是,如果我可以从第二页开始将图片添加到页眉,而页面还不存在?

我目前的代码类似于以下内容,尽管我已经删除了用于图像格式化的部分,因为我认为它不相关:

With ActiveDocument
 .Sections(1).Footers(wdHeaderFooterFirstPage) _ 
 .Range.InlineShapes.AddPicture(path)
End With

我也尝试过在后面的页面中抢先添加页眉,但似乎不起作用

With ActiveDocument
 .Sections(1).Footers(wdHeaderFooterFirstPage) _ 
 .Range.InlineShapes.AddPicture(path)
End With

With ActiveDocument
 .Sections(1).Footers(wdHeaderFooterPrimary) _ 
 .Range.InlineShapes.AddPicture(path)
End With

【问题讨论】:

更好的方法是将不同的标题保存为模板中的快速部件/构建块。然后,您可以使用您的代码在文档中插入相关部分。然后,您就有了一个独立的解决方案,不依赖于其他文件。 【参考方案1】:

我已经包含了两个声明来放置图片。两者都可以:

Sub AddGraphicPage2()
  Application.ScreenUpdating = False
  Dim aSection As Section
  For Each aSection In ActiveDocument.Sections
    With aSection
      .Headers(wdHeaderFooterPrimary).Shapes.AddPicture FileName:="C:\picture.png"
      .Headers(wdHeaderFooterPrimary).Range.InlineShapes.AddPicture FileName:="C:\picture.png"
    End With
  Next aSection
  Application.ScreenUpdating = True
End Sub

检查所有部分使其成为通用宏,它还可以处理比单个页面更复杂的文档。

【讨论】:

感谢您的建议 - 不过我并没有真正解决我的问题。当我实施您的解决方案时,仍然会在第一页上正确嵌入图片,但是当我键入并进入第二页时,标题中没有图像。 @MaxAbbe - 您需要检查您的页面设置。在布局选项卡上,您应该只选中“不同的第一页”,在这种情况下,主要页眉/页脚适用于所有其他页面。如果您选中了“奇偶不同”,则主要页眉/页脚仅适用于奇数页,这可以解释为什么第 2 页上没有图像。 @TimothyRylatt - 感谢您的帮助。我检查了该选项未选中。虽然一时觉得自己真的很傻,但我可能错过了这样一个基本的设置。我通过调用函数插入图像进行了更多尝试,我观察到一些奇怪的行为:当我通过复制和粘贴添加大量文本时,图像不会出现在第 1 页上。但是如果我删除标题中的图片在第 2 页上,它下面还有另一张图片。看起来,由于某种奇怪的原因,标题向下移动了一页。你知道为什么吗? @MaxAbbe - 不是没有看到你的完整代码。您正在复制的内容或粘贴的位置可能会导致问题。就个人而言,我不会基于使用复制和粘贴的解决方案。 是的,Copy&Paste 的使用只是为了快速添加大量文本——想想“Lorem Ipsum”——风格。我确实解决了我的问题,尽管这完全是另一个问题(请参阅我自己的答案)。不过还是谢谢你的帮助!【参考方案2】:

当我添加第二个(以及第三个等)页面时,我想通了,为什么图像“移动”到第 2 页。这与我添加图像的方式有关。

最初我将附加图像的锚点定义为Anchor:=Selection.Range。我只是在使用代码,我知道它可以处理图像的格式。

所以我刚刚删除了锚点,现在图像可以正确附加到每个标题中,无论是在第 1 页、第 2 页还是第 13 页。

请看下面对我有用的代码。

当然,我确实在我需要时调用的函数中正确实现了它;-)

ActiveDocument.Sections(1).PageSetup.DifferentFirstPageHeaderFooter = True

' Insert image in header for page 1

    With ActiveDocument.Sections(1).Headers(wdHeaderFooterFirstPage)
        With .Shapes.AddPicture(FileName:=filename, LinkToFile:=False, SaveWithDocument:=True)
            .name = "Logo_Page1"
            .Width = CentimetersToPoints(21)
            .Height = CentimetersToPoints(3)
            .RelativeHorizontalPosition = wdRelativeHorizontalPositionPage
            .Left = CentimetersToPoints(0)
            .RelativeVerticalPosition = wdRelativeVerticalPositionPage
            .Top = CentimetersToPoints(0)
            .WrapFormat.Type = wdWrapBehind
        End With
    End With
    
' Insert image in header from page 2 onwards
    
    With ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary)
        With .Shapes.AddPicture(FileName:=filename, LinkToFile:=False, SaveWithDocument:=True,Anchor:=Selection.Range)
            .name = "Logo_Page2"
            .Width = CentimetersToPoints(21)
            .Height = CentimetersToPoints(3)
            .RelativeHorizontalPosition = wdRelativeHorizontalPositionPage
            .Left = CentimetersToPoints(0)
            .RelativeVerticalPosition = wdRelativeVerticalPositionPage
            .Top = CentimetersToPoints(0)
            .WrapFormat.Type = wdWrapBehind
        End With
    End With

【讨论】:

ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary).Shapes.AddPicture 看起来很熟悉。我将不胜感激。谢谢!

以上是关于在 word 模板的第二页插入页眉,而第二页尚不存在的主要内容,如果未能解决你的问题,请参考以下文章

怎样解决Word页码从第三页开始

怎样在计算机中给第二页添加页脚(第一页不显示页脚),显示页码和文字“PowerPoint”?

Microsoft Word的第二页开始加页码脚标,总页数减一

WORD文档,如何使前后两页的页眉页脚显示不同

在访问报告的第二列打印第二页

在word中怎么设定第一页没有页码第二页从2开始