使用vba编辑Microsoft Word标题中的锚点位置

时间:2018-05-17 12:03:43

标签: vba ms-word anchor word-2010

我正在开发一个VBA宏,我自己只写了部分内容,用于改变页面方向的MS-Word,然后将之前页面的页眉和页脚复制到新页面以及其他一些内容:

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中有一个文本锚定到标题。我现在要做的是改变它在页面上的位置" Landscape"取向。

如何更改布局选项(参见下图)?我还没有找到任何信息。

将页面方向更改为" Landscape"后,这就是我的文档的样子:

如您所见,文本框中侧面的段落不在中间。所以我想把它移动一点。您还可以在此图像中看到锚点。

这是我在Word中以用户身份执行的操作:

enter image description here enter image description here

1 个答案:

答案 0 :(得分:1)

关键是要设置测量的位置(RelativeHorizontalPosition),然后使用Shape的Left设置。相对于除wdCharacter之外的任何其他内容,编辑文本时页面上的水平位置将是静态的;纵向,wdLinewdParagraph相当于使用“随文字移动”。

我通过声明并使用最后一个Section和Shape的对象来简化你发布的代码。

此代码使用Range.FormattedText将内容从一个标头复制转移到另一个标头,而不是复制和粘贴。这对于它可以工作的情况(在任何两个字范围之间)使用剪贴板更可取。

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)