我正在尝试创建一个宏,该宏创建一个具有不同方向的新页面,并使用不同的列表。
我有这段代码:
Selection.InsertBreak Type:=wdSectionBreakNextPage
If Selection.PageSetup.Orientation = wdOrientPortrait Then
MsgBox "OK"
Else
Selection.PageSetup.Orientation = wdOrientPortrait
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter
Selection.HeaderFooter.LinkToPrevious = Not Selection.HeaderFooter. _
LinkToPrevious
Selection.ParagraphFormat.TabStops.ClearAll
Selection.ParagraphFormat.TabStops(CentimetersToPoints(18)).Position = _
CentimetersToPoints(18.5)
Selection.ParagraphFormat.TabStops.Add Position:=CentimetersToPoints(9.5), _
Alignment:=wdAlignTabCenter, Leader:=wdTabLeaderSpaces
ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
End If
Selection.Style = ActiveDocument.Styles("Annexe1")
不幸的是,这改变了之前页面的表格。
我有办法解决这个问题吗? 我已经尝试过GoTo功能,包括页面,部分......但它并没有做到这一点。
谢谢!
答案 0 :(得分:0)
在VBA代码中使用Selection
时总是很棘手 - 它并不总是精确地模仿用户执行操作时会发生什么。使用SeekView
时,这尤其是页眉和页脚的问题。
以下适用于Range
个对象(将Range视为不可见的选择,但您的VBA代码中可以有多个范围 - 只能有一个选择)。
首先将当前选择分配给Range对象,然后继续插入分节符并比较页面方向,就像你一样。
如果需要更改页面方向,则会将新部分的页脚分配给Footer
对象。然后将页脚Range.ParagraphFormat
分配给ParagraphFormat
对象*。请注意这些是如何用于更改代码中的设置。最大的区别是,代码没有在页脚中添加任何选择:一切都是直接完成的。这不仅更快,更准确,还可以减少屏幕闪烁"。
最后,选择原始范围(已超出原始选区),因为我假设您希望在此时继续输入文本。如果没有,那么你可以删除这一行。
Sub ChangePageOrientationAndTabs()
Dim ftr As word.HeaderFooter
Dim pf As word.ParagraphFormat
Dim rngSel As word.Range
Set rngSel = Selection.Range
rngSel.InsertBreak Type:=wdSectionBreakNextPage
If rngSel.PageSetup.Orientation = wdOrientPortrait Then
MsgBox "OK"
Else
rngSel.PageSetup.Orientation = wdOrientPortrait
Set ftr = ActiveDocument.Sections(rngSel.Sections(1).index).Footers(wdHeaderFooterPrimary)
ftr.LinkToPrevious = False
Set pf = ftr.Range.ParagraphFormat
pf.TabStops.ClearAll
pf.TabStops(CentimetersToPoints(18)).Position = _
CentimetersToPoints(18.5)
pf.TabStops.Add Position:=CentimetersToPoints(9.5), _
Alignment:=wdAlignTabCenter, Leader:=wdTabLeaderSpaces
End If
rngSel.Paragraphs(1).Range.style = ActiveDocument.styles("Annexe1")
rngSel.Select
End Sub
*对我来说,为什么将Footer.Range分配给Range
对象可以解决上一部分的页脚问题,而Footer和ParagraphFormat是正确的...