在宏(Microsoft Word)中复制页面范围
凯文(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。