Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Сообщений [ 7 ]
- andrkar
- Модератор
- Неактивен
- Откуда: Томск
- Зарегистрирован: 10.03.2010
- Сообщений: 431
- Поблагодарили: 26
Тема: Выделение всего содержимого страницы с указанным номером
Нужна помощь!
Необходимо выделить (а затем вырезать в буфер обмена, а лучше в какую-то переменную) содержимое страницы с указанным номером.
Я пока реализовал следующий механизм.
1) если страница в документе одна, то просто выделить от начала документа до конца документа
2) если страниц больше на одну, чем номер требуемой страницы, то переход к началу страницы, следующей за требуемой, вставка там какого-нибудь символа, например знака бесконечности, потом переход к началу требуемой страницы и расширение выделения до символа бесконечности.
3) вырезание в буфер выделенного
4) переход к месту вставки
5) вставка содержимого буфера
6) очистка буфера
7) удаление знака бесконечности
Все вроде работает, но если на требуемой странице находится разрыв страницы или раздела (со следующей страницы), то он тоже копируется в буфер.
можно ли те же самые действия провести без использования Selection, или хотя бы - как провести проверку выделенной страницы, и если там есть разрыв страницы или раздела, убрать его из выделения (как я понимаю, разрыв в любом случае будет последним элементом выделения)?
- 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
Лучше день потерять — потом за пять минут долететь!
- andrkar
- Модератор
- Неактивен
- Откуда: Томск
- Зарегистрирован: 10.03.2010
- Сообщений: 431
- Поблагодарили: 26
Re: Выделение всего содержимого страницы с указанным номером
Именно то, что нужно!!! Ни в жизни бы сам не догадался бы, пока не начал плотно изучать закладки, что можно нужную страницу можно выделить именно вот так:
.Bookmarks("\page").Select
Спасибо огромное! Осталось только адаптировать код под задачу, все необходимое для этого в приведенном вами примере есть! Так как мне необходимо перемещаться содержимое как миним трех страниц, то сделаю эту процедуру с праметрами - номер страницы, содержимое которой нужно "вырезать", и номер страницы, в начало которой нужно вставить "вырезанное"...
Протестировал.. Выделенный фрагмент не удаляется со своего места, а создается его клон. А нужно, чтобы удалялось Использую первую часть, а дальше с буфером обмена. Благо процедуры его очистки уже готовы:)
Отредактировано andrkar (28.04.2010 19:32:47)
- viter.alex
- Модератор
- Неактивен
- Откуда: Харьков, Украина
- Зарегистрирован: 21.12.2009
- Сообщений: 884
- Поблагодарили: 140
Re: Выделение всего содержимого страницы с указанным номером
andrkar пишет: Выделенный фрагмент не удаляется со своего места, а создается его клон
Изменить нужно всего лишь одну строчку:
ActiveDocument.Bookmarks("TempBm").Range.Delete
Лучше день потерять — потом за пять минут долететь!
- 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 лишнего кода! Еще раз спасибо. Можно тему считать закрытой
- viter.alex
- Модератор
- Неактивен
- Откуда: Харьков, Украина
- Зарегистрирован: 21.12.2009
- Сообщений: 884
- Поблагодарили: 140
Re: Выделение всего содержимого страницы с указанным номером
А ты уверен, что после вырезания, да ещё и удаления разрыва, номера страниц не сместятся?
Лучше день потерять — потом за пять минут долететь!
- andrkar
- Модератор
- Неактивен
- Откуда: Томск
- Зарегистрирован: 10.03.2010
- Сообщений: 431
- Поблагодарили: 26
Re: Выделение всего содержимого страницы с указанным номером
уверен.. Это нужно для первых двух страниц. Причем после вырезания я вставляю разрыв строки и разрыв раздела.. Как раз то, что удаляется.. Скоро увидите, для чего это было нужно. Совсем немного осталось дописать. Всего пару процедур..
Сообщений [ 7 ]
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Выделение всего содержимого страницы с указанным номером
Если вы ищите информацию по самому мощному редактору в мире 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 даст ответ про: стандарты оформления документов список.
Форум и сайт очень разумно устроены, а все пожелания вы можете высказать в соответствующем разделе.