凯文(Kevin)想知道,在VBA中是否有一种方法可以复制一系列页面。他知道如何复制段落和文本的连续范围,但是他不知道如何复制整个页面。

没有引用整个页面的VBA对象(例如带有段落的对象),也没有VBA语句允许您选择页面。但是,您可以计算将构成页面的内容,然后选择该范围。此宏中显示了一般概念:

Sub CopyPages1()

Dim rCopy As Range

Set rCopy = ActiveDocument.GoTo(What:=wdGoToPage, _       Which:=wdGoToAbsolute, Count:=7)

Selection.GoTo What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=9

rCopy.End = Selection.Bookmarks("\Page").Range.End

rCopy.Select End Sub

此宏将rCopy范围设置为等于第7页开始的点。

然后,它在第9页的开头选择文本,并使用Word的内置书签之一从第7页的顶部到第9页的末尾进行选择。(这就是该宏的作用-选择第7页至9))

但是,您应该注意,页面在Word中非常流畅。如果您在两个不同的系统上使用完全相同的文档,则上面的宏很可能会完全返回不同的选择。为什么?因为页面在每个系统上的流动方式可能不同。

如果要实际复制选定的页面(7至9),则可以稍稍修改宏以得到所需的结果。

Sub CopyPages2()

Dim rCopy As Range     Dim rCurrent As Range

Set rCurrent = Selection.Range

Set rCopy = ActiveDocument.GoTo(What:=wdGoToPage, _       Which:=wdGoToAbsolute, Count:=7)

Selection.GoTo What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=9

rCopy.End = Selection.Bookmarks("\Page").Range.End     rCopy.Copy     Documents.Add     ActiveDocument.Range.PasteSpecial

rCurrent.Select End Sub

请注意,该宏“记住”了用户在运行之前所选择的内容,将范围存储在rCurrent变量中,并使用它再次选择了该宏末尾的该区域。所选页面(再次从7到9)被复制到一个全新的文档中。

您应注意,上述宏仅在当前文档中实际至少有9页时才能正常工作。如果您想要一个更灵活,更健壮的宏,则可以考虑以下变体。

Sub CopyPages3()

Dim rCopy As Range     Dim rCurrent As Range     Dim sTemp As String     Dim i As Integer     Dim iStart As Integer     Dim iEnd As Integer          Set rCurrent = Selection.Range

' Get page numbers to be copied     sTemp = InputBox("Page range to copy (use format 6-7)", "")

i = InStr(sTemp, "-")

If i > 0 Then         iStart = Val(Left(sTemp, i - 1))

iEnd = Val(Mid(sTemp, i + 1))

If iStart < 1 Then iStart = 1         If iEnd < iStart Then iEnd = iStart         With ActiveDocument.Range             If iStart > .Information(wdNumberOfPagesInDocument) Then                 iStart = .Information(wdNumberOfPagesInDocument)

End If             If iEnd > .Information(wdNumberOfPagesInDocument) Then                 iEnd = .Information(wdNumberOfPagesInDocument)

End If         End With

' Set the range         Set rCopy = ActiveDocument.GoTo(What:=wdGoToPage, _           Which:=wdGoToAbsolute, Count:=iStart)

Selection.GoTo What:=wdGoToPage, Which:=wdGoToAbsolute, _           Count:=iEnd         rCopy.End = Selection.Bookmarks("\Page").Range.End                  ' Copy range to a new document         rCopy.Copy         Documents.Add         ActiveDocument.Range.PasteSpecial

rCurrent.Select     Else         If sTemp > "" Then             MsgBox "There is no dash character"

End If     End If End Sub

此版本要求用户指定要复制的页面范围。调整页码以确保起始号小于或等于结束号,并且确保起始和结束号均小于文档中的总页数。

注意:

如果您想知道如何使用此页面(或_WordTips_网站上的任何其他页面)中描述的宏,我准备了一个包含有用信息的特殊页面。

_WordTips_是您进行经济有效的Microsoft Word培训的来源。

(Microsoft Word是世界上最流行的文字处理软件。)本技巧(5295)适用于Microsoft Word 2007、2010、2013、2016、2019和Office 365中的Word。