Копирование диапазона страниц в макросе (Microsoft Word)
Кевин задается вопросом, есть ли в 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.