使用 vba 在 Microsoft Word header 中编辑锚点位置
Editing anchor position in header of Microsoft Word using vba
我正在开发一个 VBA 宏,我自己只编写了它的一部分,因为 MS-Word 它会改变页面的方向,然后复制 header 和页脚以前的页面到新页面和其他一些东西:
Selection.PageSetup.Orientation = wdOrientLandscape
ActiveDocument.Sections.Last.PageSetup.DifferentFirstPageHeaderFooter = False
ActiveDocument.Sections(ActiveDocument.Sections.Last.index - 1).Headers(wdHeaderFooterPrimary).Range.Select
Selection.Copy
ActiveDocument.Sections.Last.Headers(wdHeaderFooterPrimary).Range.Select
Selection.Paste
ActiveDocument.Sections.Last.Headers(wdHeaderFooterPrimary).LinkToPrevious = False
ActiveDocument.Sections.Last.Footers(wdHeaderFooterPrimary).LinkToPrevious = False
formatHeader wdHeaderFooterPrimary
formatHeader wdHeaderFooterFirstPage
TextBox 中有一个文本锚定到 header。我现在要做的是改变它在页面上的位置 "Landscape" orientation.
如何更改布局选项(见下图)?我没能找到任何信息。
这是我的文档在将页面方向更改为 "Landscape" 后的样子:
如您所见,TextBox 中侧面的段落不在中间。所以我想把它移高一点。您还可以在此图像中看到锚点。
这是我作为用户在 Word 中的操作方式:
关键是设置测量的起点 (RelativeHorizontalPosition
),然后使用形状的 Left
设置。相对于除 wdCharacter
之外的几乎所有内容,当文本被编辑时,水平位置在页面上将是静态的;在垂直方向上,wdLine
和 wdParagraph
等同于使用 "Move with text".
我通过为最后一个部分和形状声明和使用 objects 简化了您发布的代码。
此代码使用 Range.FormattedText
来 copy-transfer 将内容从一个 header 传递到另一个,而不是复制和粘贴。这比在剪贴板工作的情况下(在任何两个单词范围之间)使用剪贴板更可取。
Dim secLast as Word.Section
Dim shp as Word.Shape
Set secLast = ActiveDocument.Sections.Last
secLast.PageSetup.Orientation = wdOrientLandscape
secLast.PageSetup.DifferentFirstPageHeaderFooter = False
secLast.Headers(wdHeaderFooterPrimary).Range.FormattedText = _
ActiveDocument.Sections(secLast.index - 1).Headers(wdHeaderFooterPrimary).Range.FormattedText
secLast.Headers(wdHeaderFooterPrimary).LinkToPrevious = False
secLast.Footers(wdHeaderFooterPrimary).LinkToPrevious = False
formatHeader wdHeaderFooterPrimary
formatHeader wdHeaderFooterFirstPage
Set shp = secLast.Range.Shapes(1)
shp.RelativeHorizontalPosition = wdRelativeHorizontalPositionPage
shp.Left = 33 ' Or you can use, for example CentimetersToPoints(1.4)
shp.RelativeVerticalPosition = wdRelativeVerticalPositionPage
shp.Top = CentimetersToPoints(14)
我正在开发一个 VBA 宏,我自己只编写了它的一部分,因为 MS-Word 它会改变页面的方向,然后复制 header 和页脚以前的页面到新页面和其他一些东西:
Selection.PageSetup.Orientation = wdOrientLandscape
ActiveDocument.Sections.Last.PageSetup.DifferentFirstPageHeaderFooter = False
ActiveDocument.Sections(ActiveDocument.Sections.Last.index - 1).Headers(wdHeaderFooterPrimary).Range.Select
Selection.Copy
ActiveDocument.Sections.Last.Headers(wdHeaderFooterPrimary).Range.Select
Selection.Paste
ActiveDocument.Sections.Last.Headers(wdHeaderFooterPrimary).LinkToPrevious = False
ActiveDocument.Sections.Last.Footers(wdHeaderFooterPrimary).LinkToPrevious = False
formatHeader wdHeaderFooterPrimary
formatHeader wdHeaderFooterFirstPage
TextBox 中有一个文本锚定到 header。我现在要做的是改变它在页面上的位置 "Landscape" orientation.
如何更改布局选项(见下图)?我没能找到任何信息。
这是我的文档在将页面方向更改为 "Landscape" 后的样子:
如您所见,TextBox 中侧面的段落不在中间。所以我想把它移高一点。您还可以在此图像中看到锚点。
这是我作为用户在 Word 中的操作方式:
关键是设置测量的起点 (RelativeHorizontalPosition
),然后使用形状的 Left
设置。相对于除 wdCharacter
之外的几乎所有内容,当文本被编辑时,水平位置在页面上将是静态的;在垂直方向上,wdLine
和 wdParagraph
等同于使用 "Move with text".
我通过为最后一个部分和形状声明和使用 objects 简化了您发布的代码。
此代码使用 Range.FormattedText
来 copy-transfer 将内容从一个 header 传递到另一个,而不是复制和粘贴。这比在剪贴板工作的情况下(在任何两个单词范围之间)使用剪贴板更可取。
Dim secLast as Word.Section
Dim shp as Word.Shape
Set secLast = ActiveDocument.Sections.Last
secLast.PageSetup.Orientation = wdOrientLandscape
secLast.PageSetup.DifferentFirstPageHeaderFooter = False
secLast.Headers(wdHeaderFooterPrimary).Range.FormattedText = _
ActiveDocument.Sections(secLast.index - 1).Headers(wdHeaderFooterPrimary).Range.FormattedText
secLast.Headers(wdHeaderFooterPrimary).LinkToPrevious = False
secLast.Footers(wdHeaderFooterPrimary).LinkToPrevious = False
formatHeader wdHeaderFooterPrimary
formatHeader wdHeaderFooterFirstPage
Set shp = secLast.Range.Shapes(1)
shp.RelativeHorizontalPosition = wdRelativeHorizontalPositionPage
shp.Left = 33 ' Or you can use, for example CentimetersToPoints(1.4)
shp.RelativeVerticalPosition = wdRelativeVerticalPositionPage
shp.Top = CentimetersToPoints(14)