Как выделить страницу в word vba

Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.

Выделение всего содержимого страницы с указанным номером

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

Сообщений [ 7 ]

1 28.04.2010 17:10:45

  • andrkar
  • Модератор
  • Неактивен
  • Откуда: Томск
  • Зарегистрирован: 10.03.2010
  • Сообщений: 431
  • Поблагодарили: 26

Тема: Выделение всего содержимого страницы с указанным номером

Нужна помощь!
Необходимо выделить (а затем вырезать в буфер обмена, а лучше в какую-то переменную) содержимое страницы с указанным номером.
Я пока реализовал следующий механизм.
1) если страница в документе одна, то просто выделить от начала документа до конца документа
2) если страниц больше на одну, чем номер требуемой страницы, то переход к началу страницы, следующей за требуемой, вставка там какого-нибудь символа, например знака бесконечности, потом переход к началу требуемой страницы и расширение выделения до символа бесконечности.
3) вырезание в буфер выделенного
4) переход к месту вставки
5) вставка содержимого буфера
6) очистка буфера
7) удаление знака бесконечности

Все вроде работает, но если на требуемой странице находится разрыв страницы или раздела (со следующей страницы), то он тоже копируется в буфер.

можно ли те же самые действия провести без использования Selection, или хотя бы — как провести проверку выделенной страницы, и если там есть разрыв страницы или раздела, убрать его из выделения (как я понимаю, разрыв в любом случае будет последним элементом выделения)?

2 Ответ от viter.alex 28.04.2010 18:19:26

  • Выделение всего содержимого страницы с указанным номером
  • viter.alex
  • Модератор
  • Неактивен
  • Откуда: Харьков, Украина
  • Зарегистрирован: 21.12.2009
  • Сообщений: 884
  • Поблагодарили: 140

Re: Выделение всего содержимого страницы с указанным номером

Если текст переносится в пределах одного документа, то можно обойтись и без буфера обмена, как показано в примере после диезов. Всё, что до диезов, это выделение нужной страницы и отсечение разрывов

Sub SelectPage()
  Dim PageNum As Long
  PageNum = InputBox("Введите номер страницы")
  With Selection
    'Переход к указанной таблице
    .GoTo wdGoToPage, wdGoToAbsolute, PageNum
    'Выбор страницы, на которой выделение
    .Bookmarks("page").Select
    'Сжимаем выделение, если последний _
    или предпоследний символ это разрыв
    If Asc(.Characters.Last) = 12 Then
      .MoveLeft wdCharacter, 1, wdExtend
    End If
    If Asc(.Characters.Last.Previous.Text) = 12 Then
      .MoveLeft wdCharacter, 2, wdExtend
    End If
    '####################################
    'Берём выделение в закладку
    .Bookmarks.Add "TempBm", .Range
    'Переход в конец документа
    .EndKey wdStory
    'Добавляем поле, ссылающееся на эту закладку
    With .Fields.Add(.Range, wdFieldRef, "TempBm", False)
      .Update 'Обновляем
      .Unlink 'Разрываем связь поля
    End With
    ActiveDocument.Bookmarks("TempBm").Delete 'Удаляем закладку
  End With
End Sub

Лучше день потерять — потом за пять минут долететь!

3 Ответ от andrkar 28.04.2010 19:10:17

  • andrkar
  • Модератор
  • Неактивен
  • Откуда: Томск
  • Зарегистрирован: 10.03.2010
  • Сообщений: 431
  • Поблагодарили: 26

Re: Выделение всего содержимого страницы с указанным номером

Именно то, что нужно!!! Ни в жизни бы сам не догадался бы, пока не начал плотно изучать закладки, что можно нужную страницу можно выделить именно вот так:

.Bookmarks("page").Select

Спасибо огромное! Осталось только адаптировать код под задачу, все необходимое для этого в приведенном вами примере есть! Так как мне необходимо перемещаться содержимое как миним трех страниц, то сделаю эту процедуру с праметрами — номер страницы, содержимое которой нужно «вырезать», и номер страницы, в начало которой нужно вставить «вырезанное»…
Протестировал.. Выделенный фрагмент не удаляется со своего места, а создается его клон. А нужно, чтобы удалялось sad Использую первую часть, а дальше с буфером обмена. Благо процедуры его очистки уже готовы:)

Отредактировано andrkar (28.04.2010 19:32:47)

4 Ответ от viter.alex 28.04.2010 21:10:14

  • Выделение всего содержимого страницы с указанным номером
  • viter.alex
  • Модератор
  • Неактивен
  • Откуда: Харьков, Украина
  • Зарегистрирован: 21.12.2009
  • Сообщений: 884
  • Поблагодарили: 140

Re: Выделение всего содержимого страницы с указанным номером

andrkar пишет:

Выделенный фрагмент не удаляется со своего места, а создается его клон

Изменить нужно всего лишь одну строчку:

ActiveDocument.Bookmarks("TempBm").Range.Delete

Лучше день потерять — потом за пять минут долететь!

5 Ответ от andrkar 28.04.2010 23:37:09

  • andrkar
  • Модератор
  • Неактивен
  • Откуда: Томск
  • Зарегистрирован: 10.03.2010
  • Сообщений: 431
  • Поблагодарили: 26

Re: Выделение всего содержимого страницы с указанным номером

Вот так реализовал для своих целей:

Sub SelectAndCutPage(PageForCut, PageForPaste As Long)
  'Выделение и вырезание содержимого необходимой страницы и вставка его на указанную
  'идея viter.alex
  With Selection
    'Переход к указанной странице
    .GoTo wdGoToPage, wdGoToAbsolute, PageForCut
    'Выбор страницы, на которой выделение
    .Bookmarks("page").Select
    'Сжимаем выделение, если последний _
    или предпоследний символ это разрыв
    If Asc(.Characters.Last) = 12 Then
        .MoveLeft wdCharacter, 1, wdExtend
    End If
    If Asc(.Characters.Last.Previous.Text) = 12 Then
        .MoveLeft wdCharacter, 2, wdExtend
    End If
    .Cut
    .MoveRight wdCharacter, 1, wdExtend
        If Asc(.Characters.Last) = 12 Then
            .Delete unit:=wdCharacter, Count:=1
        End If
    .GoTo wdGoToPage, wdGoToAbsolute, PageForPaste
    End With
End Sub

После применения данной процедуры и отладки удалил строк 50 лишнего кода! Еще раз спасибо. Можно тему считать закрытой

6 Ответ от viter.alex 29.04.2010 06:50:54

  • Выделение всего содержимого страницы с указанным номером
  • viter.alex
  • Модератор
  • Неактивен
  • Откуда: Харьков, Украина
  • Зарегистрирован: 21.12.2009
  • Сообщений: 884
  • Поблагодарили: 140

Re: Выделение всего содержимого страницы с указанным номером

А ты уверен, что после вырезания, да ещё и удаления разрыва, номера страниц не сместятся?

Лучше день потерять — потом за пять минут долететь!

7 Ответ от andrkar 29.04.2010 15:43:14

  • andrkar
  • Модератор
  • Неактивен
  • Откуда: Томск
  • Зарегистрирован: 10.03.2010
  • Сообщений: 431
  • Поблагодарили: 26

Re: Выделение всего содержимого страницы с указанным номером

уверен.. Это нужно для первых двух страниц. Причем после вырезания я вставляю разрыв строки и разрыв раздела.. Как раз то, что удаляется.. Скоро увидите, для чего это было нужно. Совсем немного осталось дописать. Всего пару процедур.. smile

Сообщений [ 7 ]

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

Похожие темы

  • Количество страниц и выделение текста страницы в активном документе
  • проблема с колонтитулами и номером страниц
  • Макрос для замены содержимого ссылок
  • Как убрать прозрачность содержимого колонтитулов в Word?
  • Перенос содержимого структуры на другой лист
  • Можно ли вычислить ячейку по Range части ее содержимого?
  • «Импорт» содержимого в ЭУС [раскрывающийся список]/[поле со списком]
  • Вставка содержимого файла или таблицы в определенное место документа

Выделение всего содержимого страницы с указанным номером

Если вы ищите информацию по самому мощному редактору в мире Microsoft Word в сети, жаловаться на недостаток документов, литературы, различных ссылок и советов придется вряд ли. На портале о Microsoft Office Word вы узнаете про: как открыть документ сохраненный с макромами.
Только в разбросанном виде все это жутко неудобно. Гораздо результативнее общаться на специальных форумах. Наш сайт о Microsoft Office Word даст ответ про: тест word 2007.
Это удобнее еще и тем, что на свою проблему вы получите отклики так сказать в развитии, можно будет обсудить, что не получается, что именно не устраивает. Наш сайт о Microsoft Office Word даст ответ про: как нарисовать рамку в ворде lkz rehcjdjq.
Для русскоязычных пользователей Microsoft Word можно посоветовать форум Ворд Эксперт.

На нем представлены как готовые ответы на вопросы и наработки опытных пользователей в разделах «часто задаваемые вопросы» и «готовые решения», так и обсуждения работы с документами и настройками программы в разных версиях  нашего любимого Microsoft Word. На портале о Microsoft Office Word вы узнаете про: как выставить сноску в ворде.
Это разделы «Настройка и Форматирование», а также «Автоматизация», где вас научат, как сделать работу с программой максимально оптимальной и быстрой, написав соответствующие макросы. Наш сайт о Microsoft Office Word даст ответ про: открыть ворд 2007 в 2003.

Если вы не хотите сами разбираться с макросами или ломать голову над той, либо иной, возникшей в работе проблемой, то в «Заявках на разработку» можете оставить заказ, форумчане вам помогут. На портале о Microsoft Office Word вы узнаете про: не могу поставить обтекание картинки текстом в ворде ошибка.

Форум Ворд Эксперт — это страничка, которую стоит запомнить, потому что она может пригодиться в любой момент. Наш сайт о Microsoft Office Word даст ответ про: стандарты оформления документов список.
Форум и сайт очень разумно устроены, а все пожелания вы можете высказать в соответствующем разделе.

Модератор:Naeel Maqsudov

Иванов

Сообщения:7
Зарегистрирован:28 сен 2009, 09:29

Добрый день, форумчане!
Одну страницу открытого документа можно выделить так:
ActiveDocument.Sections(НомерСтраницы).Range.Select

А не подскажете, как выделить одновременно, две страницы (текущую и следующую) ?

Аватара пользователя

Busine2009

Сообщения:322
Зарегистрирован:18 июл 2009, 15:34
Контактная информация:

30 сен 2009, 02:56

Иванов

в VBA нет объекта Страница.
Здесь

Код: Выделить всё

ActiveDocument.Sections(НомерСтраницы).Range.Selec t

Sections(НомерСтраницы) — не номер страницы, а номер раздела. Выделить несколько страниц сложно простому смертному: нужен опыт и знание объекта Range.

Иванов

Сообщения:7
Зарегистрирован:28 сен 2009, 09:29

30 сен 2009, 09:37

Busine2009 писал(а):Иванов

в VBA нет объекта Страница.
Здесь

Код: Выделить всё

ActiveDocument.Sections(НомерСтраницы).Range.Selec t

Sections(НомерСтраницы) — не номер страницы, а номер раздела. Выделить несколько страниц сложно простому смертному: нужен опыт и знание объекта Range.

Тогда я не простой смертный. Текст разбил постранично на разделы и сделал так:
With ActiveDocument
.Range(.Sections(ТекСтр).Range.Start, .Sections(ТекСтр + 1).Range.End).Select
End With

Аватара пользователя

Busine2009

Сообщения:322
Зарегистрирован:18 июл 2009, 15:34
Контактная информация:

30 сен 2009, 20:17

Это ненормально, чтобы каждая страница была разделом, когда этого не требует здравый смысл, так что ты не прав, но если тебе так удобно, то это твоё право.

Иванов

Сообщения:7
Зарегистрирован:28 сен 2009, 09:29

01 окт 2009, 10:03

У меня стандартные документы, имеющие конкретный текст на страницах. Что бы текст в документе не расползался при наборе текста на предыдущих, я разбил их на разделы.

Sub макрос()

        Dim PageNumber1 As Long, PageNumber2 As Long
    Dim start_ As Long, end_ As Long

            ‘1. Здесь запишите в переменные номера страниц, которые нужно выделить.
    PageNumber1 = InputBox(«Номер начальной страницы:»)
    PageNumber2 = InputBox(«Номер конечной страницы:»)

        ‘2. Проверка, что указанная начальная страница существует.
    If ActiveDocument.ComputeStatistics(wdStatisticPages) < PageNumber1 Then
        MsgBox «В файле нет указанной начальной страницы.», vbExclamation
        Exit Sub
    End If

        ‘3. Проверка, что указанная конечная страница существует.
    If ActiveDocument.ComputeStatistics(wdStatisticPages) < PageNumber2 Then
        MsgBox «В файле нет указанной конечной страницы.», vbExclamation
        Exit Sub
    End If

        ‘4. Запись в переменную начала начальной страницы.
    start_ = ActiveDocument.GoTo(What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=PageNumber1).Start

        ‘5. Запись в переменную конца конечной страницы.
        ‘ Нужно в переменную записать начало следующей страницы после указанной конечной.
        ‘ Если конечная страница — это последняя страница, то запишем в переменную конец файла.
    If ActiveDocument.ComputeStatistics(wdStatisticPages) = PageNumber2 Then
        end_ = ActiveDocument.Range.End
    Else
        end_ = ActiveDocument.GoTo(What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=PageNumber2 + 1).Start
    End If

        ‘6. Выделение указанных страниц.
    ActiveDocument.Range(start_, end_).Select

    End Sub

[свернуть]

Если вы хотите выбрать любые диапазоны страниц в документе Word, сколькими способами вы можете это сделать? Теперь я предлагаю вам несколько уловок для выбора диапазона страниц в Microsoft Word.

Выберите диапазон страниц, удерживая Shift в Word

Выберите диапазон страниц с помощью VBA

Выберите диапазон страниц с Kutools for Word


Выберите диапазон страниц, удерживая Shift в Word

Нажмите в начале страницы и удерживайте Shift, прокрутите до конца страницы и щелкните в конце содержимого этой страницы. Теперь страницы выбраны.


Выберите диапазон страниц с помощью VBA

1, нажмите Alt + F11 для открытия Microsoft Visual Basic для приложенийокно s;

2. Нажмите Модули от Вставить вкладку, скопируйте и вставьте следующий код VBA в Модули окно;

Код VBA: выберите диапазон страниц из документа Word:

Sub selectpages ()
Dim rgePages As Range
Selection.GoTo What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=2
Set rgePages = Selection.Range
Selection.GoTo What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=6
rgePages.End = Selection.Bookmarks("Page").Range.End
rgePages.Select
End Sub

3, нажмите F5 для запуска этого кода сразу выбираются страницы со страницы 2 по страницу 6.

Внимание: Здесь вы можете изменить Количество: = 2 и Количество: = 6 чтобы удовлетворить ваши потребности. В этом коде VBA мы выбираем диапазон страниц от страницы 2 до страницы 6.


Выберите диапазон страниц с Kutools for Word

Работы С Нами Kutools for WordАвтора Выбрать страницы Утилита, вы можете быстро выбрать любые диапазоны страниц в документе. Всего один щелчок мыши поможет вам завершить выбор страницы.

1. Нажмите Кутулс > Разделы > Выбрать страницы, см. снимок экрана:

2. Во всплывающем диалоговом окне вы можете указать диапазон страниц, введя число в поле под Выберите страницы в соответствии с разделом диапазона. Или вы можете выбрать определенные страницы по своему усмотрению в Выбрать страницы в соответствии с выбором список. Смотрите скриншот:

документ выберите конкретную страницу 2

3. Нажмите OK or Применить кнопку, чтобы выбрать желаемые страницы. 

Нажмите, чтобы скачать Kutools for Word и бесплатная пробная версия прямо сейчас!


Демонстрация: выбор диапазона страниц из документа Word


Относительные статьи:

  • Выбрать текущие страницы в Word
  • Выбрать определенные страницы в Word


Рекомендуемые инструменты для повышения производительности Word

выстрел kutools word kutools tab 1180x121

выстрел kutools word kutools plus tab 1180x120

Kutools For Word — Более 100 расширенных функций для Word, сэкономьте 50% времени

  • Сложные и повторяющиеся операции можно производить разово за секунды.
  • Вставляйте сразу несколько изображений из папок в документ Word.
  • Объединяйте и объединяйте несколько файлов Word из папок в одну в желаемом порядке.
  • Разделите текущий документ на отдельные документы в соответствии с заголовком, разрывом раздела или другими критериями.
  • Преобразование файлов между Doc и Docx, Docx и PDF, набор инструментов для общих преобразований и выбора и т. Д.

Комментарии (0)


Оценок пока нет. Оцените первым!

Иванов
Начинающий
Начинающий
 
Сообщения: 1
Зарегистрирован: 28.09.2009 (Пн) 9:07

Выделить несколько страниц подряд в Word

Одну страницу открытого документа выделяем так:
ActiveDocument.Sections(НомерСтраницы).Range.Select

А как выделить две подряд начиная с текущей?


GDK
Обычный пользователь
Обычный пользователь
 
Сообщения: 80
Зарегистрирован: 23.10.2008 (Чт) 16:15

Re: Выделить несколько страниц подряд в Word

Сообщение GDK » 05.10.2009 (Пн) 16:36

Можно определить диапазон для начальной страницы и взять его св-во старт, определить диапазон для конечной стр. и взять энд, создать новый диапазон на основе этих данных и выделить его.



Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 2

Понравилась статья? Поделить с друзьями:
  • Как выделить столбец текста в word
  • Как выделить ссылку в тексте word
  • Как выделить слово в microsoft word
  • Как выделить среднее значение в excel
  • Как выделить скрытые объекты в excel