Статьи из блога

Вставка скопированного текста в предопределенном формате

Сергей задал вопрос:

Довольно часто при работе с текстом нужно вставлять в него цитаты из других документов и было бы удобно, если бы эти цитаты были видны там, куда вставляешь. Т.е., при вставке необходимо, чтобы новый текст вставлялся уже в другом, заранее определенном форматировании (курсивом, цветом и пр.) в отличие от основного текста.

Если бы Вы смогли мне помочь в этом? Кстати, я думаю, что такая особенность работы с текстом была бы необходима многим.

Самый лучший способ - использовать специальные стили для вашего фрагмента текста. Вставляете текст и применяете к нему соответствующий стиль. Это не сложно. Но чтобы вставляемый текст автоматически преобразовывался в этот стиль - так не получится.

 

Либо, есть еще решение использовать макрос, который бы брал текст из буфера обмена, вставлял его и уже потом применял к вставленному тексту нужное форматирование. Для макроса нужно создать кнопку на панели инструментов и после того, как скопировали текст, следует установить курсор в нужное вам место документа и нажать эту кнопку.

 

Вот примерный код макроса. После того, как вы скопировали текст из любого источника, поставьте указатель мыши в то место документа, где вам нужно вставить цитату, и нажмите кнопку макроса.

Sub insertQuotes()
'Вставка текста из буфера обмена в качестве цитаты и задание форматирования
On Error Resume Next    'игнорируем ошибку
Dim MyData As DataObject
Set MyData = New DataObject
MyData.GetFromClipboard
Selection.Text = MyData.GetText(1) 'вставляем текст
'удаляем лишние пробелы в конце выделения и знак абзаца
If Right(Selection.Text, 1) = Chr(32) Or _
   Right(Selection.Text, 1) = Chr(13) Then
   Selection.MoveLeft wdCharacter, 1, wdExtend
End If
'обрамляем выделенный текст кавычками
With Selection
   .InsertBefore Chr(148)
   .InsertAfter Chr(147)
End With
'устанавливаем отступы сверху, снизу и по бокам цитаты
With Selection.ParagraphFormat
   .LeftIndent = CentimetersToPoints(1)
   .RightIndent = CentimetersToPoints(0.5)
   .SpaceBefore = 12
   .SpaceAfter = 12
End With
'форматируем шрифт
With Selection.Font
   .Name = "Times New Roman"
   .Size = 11
   .Italic = True
   .Color = wdColorGray50
End With
End Sub

twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru rutvit.ru myspace.com technorati.com digg.com friendfeed.com pikabu.ru blogger.com liveinternet.ru livejournal.ru memori.ru google.com bobrdobr.ru mister-wong.ru yahoo.com yandex.ru del.icio.us

Еще записи по вопросам использования Microsoft Word:

Комментариев: 15

  1. Alex Volkov
    21.05.2009 в 19:19 | #1

    Антон, да вы классный програмист! Отличный сайт! Может, нам совместно создать программу или шаблон для форматирования сценариев? Типа "Писарь" или Final Draft, но под кириллицу? smile

  2. 21.05.2009 в 19:25 | #2

    Александр, вы преувеличиваете. Я начинающий (правда, уже давно) программист на VBA. Сейчас несколько отошел от этого, так как нет пока задачи, интересной мне.

    Что касается программы или шаблона, то может быть нам поможет мой соавтор-программист Александр Витер.

    И я не встречал упоминаемых вами программ. Можете привести ссылки?

  3. 21.05.2009 в 19:28 | #3

    Нашел сам. Надо посмотреть.

  4. Alex Volkov
    22.05.2009 в 19:02 | #4

    Антон,

    я написал в своём блоге про сценарные проги и шаблоны.

    http://new-storyteller.livejournal.com/10438.html

    В принципе, наверное, народу достаточно и "Писаря". Хотя, на мой взгляд, он нуждается в доводке.

    Ладно, это не так интересно. smile

  5. 22.05.2009 в 19:19 | #5

    Отлично. Прочитаю. Я, кстати, сегодня смотрел эти две проги. Английская мне показалось сложной для работы - читал справку и тыкал клавиши, чтобы вышло что-нибудь. И это же самостоятельный редактор.

    А шаблон нашего соотечественника понятен.

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

  6. marikva
    25.05.2009 в 10:37 | #6

    По-моему эта задача решается следующим образом: изначально для своих документов создаёшь собственный шаблон с защитой по возможным стилям (лично у меня - три заголовочных, два текстовых, по одному для таблиц, примечаний и оглавлений) - когда в такой документ вставляется кусок из другого документа, он автоматически форматируется "умолчательным" основным - т.е. как бы без стиля - поэтому он отлячается от других абзацев.

  7. Рифат
    25.07.2009 в 12:37 | #7

    каким образом Вам можно задать вопрос?

  8. Иван Петров
    14.10.2009 в 09:44 | #8

    А у меня макрос не работает, пишет что ошибка в этих строках:

    Dim MyData As DataObject

    Set MyData = New DataObject

  9. 14.10.2009 в 10:03 | #9

    Иван, вам нужно подключить библиотеку типов Microsoft Scripting Runtime. Откройте редактор VB, меню Tools - References. Найдите и установите флажок на указанной библитетеке.

  10. 14.10.2009 в 10:10 | #10

    Нет, Иван, Вам нужно подключить Microsoft Forms 2.0 Object Library. В ней содержится объект DataObject, который используется для работы с буфером обмена.

    И еще добавлю, что лучше использовать не прямое форматирование, а создать собственный стиль для цитат или изменить встроенный, который так и называется «Цитата». Тогда вместо

    'устанавливаем отступы сверху, снизу и по бокам цитаты
    With Selection.ParagraphFormat
       .LeftIndent = CentimetersToPoints(1)
       .RightIndent = CentimetersToPoints(0.5)
       .SpaceBefore = 12
       .SpaceAfter = 12
    End With
    'форматируем шрифт
    With Selection.Font
       .Name = "Times New Roman"
       .Size = 11
       .Italic = True
       .Color = wdColorGray50
    End With

    написать всего одну строчку:

    Selection.Paragraphs(1).Style = "Цитата"

  11. Иван Петров
    14.10.2009 в 11:38 | #11

    Спасибо, Антон!

    Подключил Вами предложенную библиотеку (+еще некоторые) и макрос заработал. По адресу

    http://benoni.mylivepage.ru/file/2494

    находится украинский перевод VisualBasicOffice6, который работает в Worde 2007.

  12. Иван Петров
    14.10.2009 в 11:59 | #12

    Спасибо, Александр!

    Тоже неплохо. Действительно, предложенных Антоном библиотек, оказалось маловато. Макрос заработал при включенной Microsoft Forms 2.0 Object Library.

  13. Иван Петров
    02.11.2009 в 22:32 | #13

    Антон, Александр!

    Вы не знаете, что заменяет Microsoft Forms 2.0 Object Library в Office 2010? Там я этой библиотеки не нахожу.

  14. 03.11.2009 в 09:13 | #14

    Не знаю. А что ее может замеинть? Эта библиотека должна быть по этому пути: C:\WINDOWS\system32\FM20.DLL. Если ее там нет, скажите, я вам пришлю. Если есть, но всё рввно не видна в окне Tools→References, то ее нужно зарегистрировать в системе.

    Чтобы зарегистрировать нужно зайти меню «Пуск»→«Выполнить…» и ввести regsvr32 C:\WINDOWS\system32\FM20.DLL

  15. Иван Петров
    03.11.2009 в 15:38 | #15

    Александр!

    Нужная библиотека есть по адресу: C:\WINDOWS\system32\FM20.DLL, но не видна в окне Tools→References.

    Зарегистрировать в системе не удаётся (наверное она зарегистрированная). Пошел другим путем:в окне Tools→References при помощи Brause открыл путь к ней по выше Вами указаному адресу, нашел её, открыл (добавил в список) и поставил против неё птичку. Спасибо!

    Office 2010 очень гибкий! Наверное надо создать отдельную страницу по нём!

Оставьте комментарий!

(обязательно)

^ Наверх