我正在开发一个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中以用户身份执行的操作:
答案 0 :(得分:1)
关键是要设置测量的位置(RelativeHorizontalPosition
),然后使用Shape的Left
设置。相对于除wdCharacter
之外的任何其他内容,编辑文本时页面上的水平位置将是静态的;纵向,wdLine
和wdParagraph
相当于使用“随文字移动”。
我通过声明并使用最后一个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)