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

Использование макроса для вывода части текста поля

Игорь спрашивает:

У меня есть некий шаблон договора. В нем, среди прочего, есть поле ввода ФАМИЛИИ ИМЕНИ И ОТЧЕСТВА. Мне нужно, чтобы после ввода полного ФИО, в конце договора отображалась только ФАМИЛИЯ и ИНИЦИАЛЫ. Решаемо ли это?

Игорь, да это возможно.

Вам следует открыть ваш шаблон договора для редактирования, затем открыть редактор Visual Basic («Alt+F11») и вставить в модуль шаблона вот этот макрос:

Sub FIO()
Dim bm As Bookmark
Dim sText As String
Dim sArray() As String
Dim sResult1 As String
Dim sResult2 As String
Set bm = ActiveDocument.Bookmarks("bm")
sText = bm.Range.Text
sArray = Split(sText)
sResult1 = sArray(0) & " "
sResult1 = sResult1 & Left(sArray(1), 1) & ". "
sResult1 = sResult1 & Left(sArray(2), 1) & "."
sResult2 = sArray(2) & " "
sResult2 = sResult2 & sArray(1)
ActiveDocument.Bookmarks("fio").Select
Selection.TypeText sResult1
End Sub

Далее, перейдите в текст шаблона договора и выделите текстовое поле и в свойствах его (щелчок правой кнопкой и выбор команды "Свойства") установите флажок на параметрах "Разрешить изменения" и "Вычислить при выходе", а в поле "Закладка" введите имя закладки для этого поля - bm. В поле "При выходе" выберите ваш макрос "FIO" и закройте диалог.

 

Далее, определитесь - в каком месте шаблона у вас должно выводиться Фамилия с инициалами. В этом месте добавьте закладку (под именем "fio"). Затем установите защиту на шаблон и сохраните изменения.

 

Создайте документ на основе вашего шаблона, введите ФИО в поле и нажмите клавишу «TAB» (выход из поля). В том месте, где вы установили закладку, появится фамилия с инициалами.

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:

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

  1. Александр
    22.11.2008 в 18:45 | #1

    Добрый день!

    Очень заинтересовал Ваш макрос, но он у меня выдает следующую ошибку:

    Run-time error 5941:

    Запрашиваемый номер семейства не существует.

    Помогите разобраться.

  2. 22.11.2008 в 18:58 | #2

    Александр, возможно у вас нет нужной закладки.

  3. 24.11.2008 в 13:23 | #3

    Александр, я поправил ваш шаблон и выслал вам. Если вопросы остались, спрашивайте.

  4. Аля
    22.06.2009 в 22:05 | #4

    Здравствуйте. Подскажите пожалуйста, как зафиксировать таблицу (обычную) в конце каждой страницы, чтобы при вводе текста, она не двигалась вниз с нажатием кнопки enter. Спасибо.

  5. 22.06.2009 в 22:39 | #5

    Аля, вам нужно использовать колонтитулы, вероятно. Почитайте здесь на сайте о колонтитулах (введите в поле поиска "колонтитул").

  6. Олег
    01.10.2009 в 11:19 | #6

    Доброго времени суток, а можно ли сделать так, чтобы после ввода ФИО в поле, ФИО отоброжалось в указанных закладками местах, далее по тексту.

  7. Олег
    01.10.2009 в 11:22 | #7

    т.е. используя одну и туже закладку вставлять ФИО в договоре по тексту

  8. 01.10.2009 в 12:22 | #8

    Можно. Вот здесь описано.

  9. Виктор
    24.11.2009 в 13:22 | #9

    /// Далее, перейдите в текст шаблона договора и выделите текстовое поле и в свойствах его (щелчок правой кнопкой и выбор команды "Свойства") установите флажок на параметрах "Разрешить изменения" и "Вычислить при выходе", а в поле "Закладка" введите имя закладки для этого поля - bm. /// Текстовое поле - не могу понять как его создать и где его свойства.

  10. Виктор
    24.11.2009 в 13:23 | #10

    И как сделать, чтобы вводимые значения (в закладках) при вводе были затененные?

  11. 24.11.2009 в 17:49 | #11

    Виктор, это поле вставляется из панели инструментов "Формы". На этой же панели и кнопка "Свойства". Почитайте вот эту заметку: http://wordexpert.ru/page/panel-instrumentov-formyi

  12. Денис
    26.11.2009 в 19:03 | #12

    Антон, прошу, подскажите, а для нового текстового поля Word 2007 можно как-то назначить закладку наподобие того, что описано выше? Свойства этого поля вызываются только из вкладки "Разработчик" и не содержат никаких идентификаторов, кроме тега и имени (XML, надо понимать). Т.е. не работает код поля REF. Возможно есть какой-то другой вариант? Мне в общем-то нужно продублировать в нескольких местах содержимое определенного поля.

    Спасибо.

  13. 26.11.2009 в 19:41 | #13

    Денис, вот заметка на эту тему: http://wordexpert.ru/page/vvod-povtoryayushhixsya-fragmentov-teksta-v-word-2007

  14. Елена
    04.01.2010 в 18:22 | #14

    Антон, мне нужно, чтобы такая закладка была в колонтитулах. После нажатия TAB, WORD выдаёт ошибку и закрывается.

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

  15. 04.01.2010 в 19:43 | #15

    Елена, отправьте ваш документ сюда (http://zalil.ru/) и потом сообщите ссылку на файл.

  16. Елена
    04.01.2010 в 20:07 | #16

    Спасибо за оперативность!

    http://slil.ru/28437835

  17. 05.01.2010 в 13:51 | #17

    Елена, я разобрался в чем причина: в макросе и способе вставки текста закладки в колонтитулы.

    Я подредактировал ваш документ. Теперь, вставляя фамилию имя и отчество в поле, инициалы будут подставлятся в нужные места, вами указанные.

    Скачать файл можете отсюда: http://slil.ru/28439909

    Сообщите о результатах.

    P.S. Я бы вам рекомендовал использовать шаблоны вместо того, чтобы создавать поля непосредственно в документах. Есть шаблон - нет необходимости править каждый раз старый документ.

  18. Елена
    05.01.2010 в 14:39 | #18

    Спасибо огромное! Но у меня возникают такие ошибки:

    1. При первом введении всё ок. При удалении ФИО выдаёт ошибку макроса.

    2. При повторном введении, к тому месту где уже стоит фамилия и инициалы от первого изменения, прибавляется ещё одна фамилия и инициалы.

    http://slil.ru/28440032

  19. Елена
    05.01.2010 в 14:41 | #19

    И ещё не совсем поняла про шаблоны.

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

    шаблона или в виде просто документа?

  20. 05.01.2010 в 14:47 | #20

    А зачем удалять фамилию? Для другого клиента? Вот потому-то я и говорю о необходимости иметь шаблон, а не править документ.

    Что касается добавления новых данных в места закладок, то это из-за того, что в макросе нет механизма удаления текста после закладок (не нужно).

    Разница между шаблоном и документом есть и существенная. Имея один шаблон на его основе вы создаете документы для каждого клиента (один документ - один клиент). В этом случае у вас нет необходимости править поля и не возникнут те ситуации, о которых вы упоминаете.

  21. Елена
    05.01.2010 в 15:34 | #21

    Антон! Ещё раз Вам огромное спасибо!

  22. Елена
    08.01.2010 в 21:15 | #22

    Здравствуйте! Благодаря Вам у меня получилось сделать 2 шаблона договоров: один для ИП, второй для ООО. Но сейчас стоит задача их объединить в один, и чтобы в зависимости от условий (ИП или ООО) в таблички вставлялись данные с разных полей. Бьюсь над этим уже несколько дней. Попыталась сделать общий договор, пришлось отказаться от сокращения инициалов, так как ФИО в разных падежах. Но тогда в табличке не получается сделать выравнивание никак. Да и не сильно договор автоматизированный получился. Может есть какой то выход?

    Все три файла здесь:

    http://slil.ru/28454068

  23. Елена
    11.01.2010 в 10:34 | #23

    Здравствуйте ещё раз. Подскажите, есть решение у моей задачи?

  24. 11.01.2010 в 14:25 | #24

    Елена, еще не смотрел, не было времени.

  25. 11.01.2010 в 18:26 | #25

    Елена, а зачем вы хотите использовать один шаблон вместо двух? В чем выгода будет? На мой взгляд, это усложнение.

  26. 11.01.2010 в 18:31 | #26

    Я бы на вашем месте сделал бы (если бы профессионально работал с заказчиками) что-то похожее вот на это решение: Использование форм для ввода данных в документ.

    То есть, была бы форма с нужными полями. Заполнялись только те, которые нужны (в зависимости от формы собственности) и затем заполненные поля подставлялись уже в документ.

  27. Елена
    13.01.2010 в 23:16 | #27

    Спасибо. Хорошее решение. Вопросы написала в соответствующий раздел: http://wordexpert.ru/page/ispolzovanie-form-dlya-vvoda-dannyih-v-dokument

  28. 11.02.2010 в 14:23 | #28

    Подскажите, плиз! Каким образом можно использовать функции при выходе из поля формы. Интересует следующая возможность: в первом текстовом поле вводится число либо текст, при выходе вызывается моя функция, во втором текстовом поле появляется результат от работы функции. Пытался использовать "Поле" и вводить в нем Формулы, все время выдается синтаксическая ошибка. Может быть у кого есть ссылка на описание.

    Спасибо!

  29. 11.02.2010 в 19:38 | #29

    Может быть вам и не нужен макрос, а можно обойтись формулами в полях? Посмотрите этот пример

  30. Роман Кузьминов
    23.06.2010 в 11:05 | #30

    Здравствуйте! У меня есть шаблон письма word2007, с полями ФИО, адрес, сумма. Есть список адресатов, которым нужно отправить это письмо (таблица с графами ФИО, адрес, пол, сумма). Вопрос как сделать, чтобы при создании нового документа на основе шаблона данные из соответствующих граф списка вставлялись в соответствующие поля шаблона. Хорошо бы еще, чтоб при обращении "Уважаем-ая, -ый" окончание менялось в зависимости от пола.

  31. 23.06.2010 в 11:52 | #31

    Вам нужно использовать Слияние. Почитайте эту тему на форуме, возможно, разберётесь. Также имеется заметка на нашем сайте, посвящённая слиянию. В скором времени появится заметка о слиянии в более современных версиях редактора.

    А вот и заметка.

  32. Олег
    10.11.2010 в 14:02 | #32

    Как ввести вычисление вне таблицы?

    Это делается таким образом:

    выделяешь таблицу, далее меню Вставка-Закладка, называешь закладку к примеру "Таблица1"

    далее в любом месте документа делаешь меню Вставка - Поле, в появившемся окне нажимаешь кнопку Формула.

    в выпадающем списке "Вставить функцию" выбираешь что требуется

    в выпадающем списке "Вставить закладку" выбираешь созданную тобой закладку "Таблица1"

    указываешь ячейки которые надо посчитать.

    пробовал по этому примеру пишет: !Синтаксическая ошибка, [

  33. Владимир
    21.11.2011 в 15:43 | #33

    А как можно осуществить данный макрос без текстового поля? Т.е. есть в тексте ФИО полностью. Выделяем ФИО, вставляем закладку bm, там где необходимо закладку fio, запускаем макрос и готово - фамилия с инициалами стоит. Но каждый раз в этом случае макрос приходится запускать вручную. А чтобы его не вручную? И без текстового поля панели форм?

  34. Влад
    07.03.2012 в 09:22 | #34

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

  35. 07.03.2012 в 14:31 | #35

    Обратитесь на наш форум, там помогут.

  36. Екатерина
    11.02.2013 в 00:44 | #36

    Здравствуйте, хотела бы к Вам обратиться за помощью.

    Есть Wordовский файл - шаблон (как я его называю), в котором на первом листе есть таблица с изменяемыми данными(пользователь каждый раз вводит туда информацию о новом клиенте, который заключает договор) :ФИО, адрес, организация и т.д), а ниже на следующих листах договор, под ним - на третьем листе - акт об оказании услуг, на 4м листе - счет на оплату.

    Как сделать так, чтобы данные с первого листа раскидывались в нужные места документов на 2,3 и 4м листах?

    В OpenOffice всё работало, но придя на новое место работы, где он отсутствует и есть только 2003 WORD, я даже не знаю что и делать. Времени на договора из-за этого уходит уйма, так как приходится одни и те же данные вбивать в ручную в разные документы. Возможно ли что-то сделать или нет?

  37. Екатерина
    12.02.2013 в 22:40 | #37

    Всё получилось. Уже можете не затрудняться вопросом

  38. 12.02.2013 в 22:43 | #38

    Екатерина, чтобы оперативно получить ответ на свой вопрос, его лучше задавать на форуме, а не в комментариях grin

  39. Пваел
    06.12.2013 в 17:42 | #39

    Разве нет способа реализовать это без макроса. Например Поле с инициалом имени ссылается на поле с именем и какой либо формулой оставляет от него одну первую букву. а? По крайней мере, я ищу такой способ. Но пока не нашёл... к сожалению.

  40. Аноним
    15.12.2020 в 10:56 | #40

    Добрый день, при нажатии на TAB выдает ошибку "4605" так как ссылается на защищенную область в документе, как возможно решить эту проблему?

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

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

^ Наверх