![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы
![]() |
Поиск в этой теме
![]() |
![]() |
#1 |
Форумчанин
Регистрация: 04.12.2008
Сообщений: 260
|
![]()
Добрый вечер! Скажите, пожалуйста, нужно провернуть такую вот вещь:
выпадающий список, в нем например выбор Петя, Вася А далее идет текст: например Петя пил водку. Петя пил пиво. Петя был сизым. Надо сделать так, что бы выбрав из списка имя Вася по тексту везде имя Петя поменялось на Васю ну и наоборот. Реально?
Я бы изменил мир, но Бог не дает исходники...
|
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 17.07.2009
Сообщений: 519
|
![]()
1) Поместите ваш элемент управления содержимым в закладку (bookmark). B.e. с именем ИМЯ.
2) В тексте вместо "Петя" указывайте поле с именем этой закладки { ИМЯ } Фигурные скобки здесь элементы поля - вставляются по Ctrl-F9 3) Для обновления всех ссылок в документе после изменения выбора нажмите CTRL-A (выбор всего текста) F9 (обновление полей) Обработка событий этого контрола в полном объёме подразумевает использование VSTO Но для простого автоматического обновления полей при выходе из контрола можно поступить так: Добавьте в модуль класса ThisDocument код Код:
(При желании нетрудно добавить дополнительные проверки на то какой контрол вызвал событие) Я проверил этот код в Word 2010. К сожалению, Word 2007 у меня нет. Альтернатива: использовать старые поля {FORMDROPDOWN} из Word 2003. В последнем случае можно указать макрос выполняющий все замены после выбора элемента. Но документ должен быть защищён. Иногда бывает проще организовать выбор элемента из списка, запуская свой макрос с помощью поля MACROBUTTON. (Предполагается что этот макрос отобразит пользовательскую форму со списком для выбора и осуществит дальнейшую обработку) Так же смотрите: http://gregmaxey.mvps.org/FormField_...rm_ListBox.htm http://gregmaxey.mvps.org/ContentCon...ols_Add_In.htm http://gregmaxey.mvps.org/Modify_CC_...older_Text.htm Последний раз редактировалось Aent; 07.02.2011 в 01:54. |
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 04.12.2008
Сообщений: 260
|
![]()
Супер! Большое Вам спасибо! Но потребовалось усложнить задачу:
Список - Николай/Вова Выбираем Николай и он заменят Николай Иванов сеет хлеб Николай Иванов пашет Выбираем Вова и он заменят Вова унылый полотенчик сеет хлеб Вова унылый полотенчик пашет Т.е в списке только имена, а по тексту вставляются уже самостоятельные предложения в зависимости от выбранного имени. Ну или даже вот так: Выбираем из списка 1 а он вставляет Николай молодец. Выбираем 2, тогда заменят Николай молодец на Николай лох. Ну Вы поняли. Реально так сделать? Поможете? Пожалуйста. Посмотрите на аватар ![]()
Я бы изменил мир, но Бог не дает исходники...
|
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 17.07.2009
Сообщений: 519
|
![]()
Вариант без программирования на VBA:
Вместо поля { ZZZ} в тексте используйте поле IF { IF "{ZZZ}" = "Иван" "Иван сеет" "Николай пашет"} Здесь ZZZ - имя закладки для элемента управления содержимым. Для выбора более чем из 2-х вариантов используйте вложенные поля IF. { IF "{ZZZ}" = "Иван" "Иван сеет" {IF "{ZZZ}" = "Николай" "Николай пашет" "Сергей жнёт"} Помните, что кавычки в тексте (в том числе и фигурные) в полях надо экранировать с помощью символа "\" : "ООО \"Рога и копыта\"" |
![]() |
![]() |
![]() |
#5 |
Форумчанин
Регистрация: 04.12.2008
Сообщений: 260
|
![]()
Огромное спасибо!
Не совсем понял пару моментов: 1. \ не работает. Вот я например сделал так: { IF "{ZZZ}" = "Иван" "Иван \"тупа\"сеет" } и он мне так и выдал: Иван \"тупа\"сеет, т.е слово тупа в кавычки не выделил. Или я чего-то не понимаю? 2. { IF "{ZZZ}" = "Иван" "Иван сеет" {IF "{ZZZ}" = "Николай" "Николай пашет" "Сергей жнёт"} } - здесь наверное не хватает скобки, да? И еще момент: у меня идет нумерация абзацев, выглядит это вот так: ![]() Мне надо, что при выборе "1" получилось вот так: ![]() Т.е переносил с сохранением нумерации. Может есть какой-то символ, который переносит текст на новый абзац? Просто если самому это делать выходит вот что: ![]() т.е нумерация для 1 и 2 абзацев пропадает почему-то. Это все из-за {}. Этот момент мне не так прям важен, я могу просто продублировать условие по абзацам, но мало ли есть уже готовое решение?!
Я бы изменил мир, но Бог не дает исходники...
Последний раз редактировалось Polotenchik; 09.02.2011 в 15:14. |
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 04.12.2008
Сообщений: 260
|
![]()
Еще хотел узнать^
1. можно ли использовать оператор или or: { IF "{ZZZ}" = "Иван" or "Николай" "Иван сеет" } Т.е если выбрано Иван или Николай тогда ... 2. Таким же методом можно как-то сделать checkbox? 3. Нашел серьезную проблему: даже вот в Вашем примере если нижу что-нибудь написать то почему-то не работает комбинация Cytl+Z. Из-за чего? Может из-за кода?
Я бы изменил мир, но Бог не дает исходники...
Последний раз редактировалось Polotenchik; 09.02.2011 в 17:47. |
![]() |
![]() |
![]() |
#7 | ||||
Форумчанин
Регистрация: 17.07.2009
Сообщений: 519
|
![]()
1)
Цитата:
А что сам символ экранировки исчезнет - никто и не обещал ![]() Я рекомендую делать символ \ размером 1 и цветом подложки. 2) Цитата:
3) Цитата:
Вообще, полезно иногда читать HELP: Цитата:
Нумерация также организуется полями. Добавтьте код для поля SEQ во вставляемый текст. Настоятельно рекомендую внимательно ознакомься со статьёй http://msdn.microsoft.com/en-us/libr...ice.10%29.aspx для первичного понимания вопроса. Править подставляемый текст в документе нужно после трансформации поля в плайн текст по Ctrl+Shift+F9 4) С чекбоксом ситуация сложнее. Но можно, например, в коде обработчика Document_ContentControlOnExit проверять значения свойств СontentControl.Tag и ContentControl.Checked. И устанавливать переменную документа (variable) с именем, совпадающим с тегом элемента управления контентом. Значение этой переменной можно проверять в поле IF, используя поле DOCVARIABLE. А можно и сразу вносить изменение в текст документа непосредственно из кода VBA... Обратите внимание что код обработчика события выполняется после того как вы покинули элемент управления контентом а не в момент изменения значения. Мне лично, для иммитации чекбокса показалось удобнее использовать поле MACROBUTTON. Использование элементов управления контентом из WORD 2007-2010 делает документ не мобильным. При использовании этой технологии в Word 2003 ничего работать не будет. Даже с конвертером. Поэтому, ещё раз рекомендую почитать про поля и в частности про поле MACROBUTTON. Например, здесь: http://www.gmayor.com/Macrobutton.htm Последний раз редактировалось Aent; 10.02.2011 в 01:51. |
||||
![]() |
![]() |
![]() |
#8 |
Форумчанин
Регистрация: 17.07.2009
Сообщений: 519
|
![]()
Ещё можно использовать ActiveX CheckBox :
Например, {CONTROL Forms.CheckBox.1 /s} Обработчик Код:
К сожалению, доступ к свойствам ActiveX элементов управления затруднён в версиях MS Word выше 2003. |
![]() |
![]() |
![]() |
#9 | ||
Форумчанин
Регистрация: 04.12.2008
Сообщений: 260
|
![]()
Спасибо большое! Буду разбираться!
Цитата:
Цитата:
Я бы изменил мир, но Бог не дает исходники...
|
||
![]() |
![]() |
![]() |
#10 |
Форумчанин
Регистрация: 17.07.2009
Сообщений: 519
|
![]()
В MS Word 2010 описанного глюка с Ctrl-Z не наблюдаю. 2007 у меня нет.
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Выпадающий список | tsergey | Помощь студентам | 2 | 24.01.2010 15:34 |
Многоуровневый список и стили в Word 2007 | CaptainNemo | Microsoft Office Word | 12 | 08.06.2009 23:45 |
Выпадающий список | Акашаев Нурлан | Общие вопросы Delphi | 3 | 27.06.2008 16:58 |
выпадающий список | SunKnight | БД в Delphi | 1 | 24.03.2008 22:44 |
выпадающий список | Toxa | Microsoft Office Excel | 2 | 23.04.2007 09:40 |