Кевин задается вопросом, есть ли в 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), я подготовил специальную страницу, содержащую полезную информацию.

link: / wordribbon-WordTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

WordTips — ваш источник экономичного обучения работе с Microsoft Word.

(Microsoft Word — самая популярная программа для обработки текстов в мире.) Этот совет (5295) относится к Microsoft Word 2007, 2010, 2013, 2016, 2019 и Word в Office 365.