AXForum  
Вернуться   AXForum > Microsoft Dynamics CRM > Dynamics CRM: Разработка
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.05.2011, 14:56   #1  
griefon is offline
griefon
Участник
 
131 / 52 (2) ++++
Регистрация: 07.12.2010
Адрес: down under
Проблема с VBA for Word
Вопрос возник в процессе заполнения печатных форм с использованием слияния.

Задача:
В процессе MailMerge нужно одно из полей MergeField разбить на отдельные символы и этими символами заполнить указанные места в документе.

Мой вариант решения:
Написан обработчик события MailMergeBeforeMerge, который срабатывает перед каждым слиянием.
В этом событии выполнялся find and replace, для заранее вписанных в документ меток на выбранный символ из нужного поля.
Данный код работал на тестовой среде, но на сервере заказчика этот код не работает.

Далее была попытка использовать DocVariable, но их подстановка осуществляется до начала слияния.

Дополнение:
- код по замене работает если написать его в открытие документа
- событие MailMergeBeforeMerge срабатывает, но код не выполняет замену, при этом никаких ошибок не выдает.

Код:
PHP код:
Private Sub Document_Open()

    
Set wdapp Word.Application
     
End Sub


Private Sub wdapp_MailMergeBeforeMerge(ByVal Doc As DocumentByVal StartRecord As LongByVal EndRecord As LongCancel As Boolean)

    
With Selection.Find
    
.ClearFormatting
    
.Text "#1"
    
.Replacement.ClearFormatting
    
.Replacement.Text Mid(Doc.MailMerge.DataSource.DataFields(5).Value11)
    .
Execute Replace:=wdReplaceAllForward:=True_
        Wrap
:=wdFindContinue
End With


End Sub 
Вопрос, либо как сделать, чтобы такой вариант работал, либо найти альтернативный вариант.
Старый 23.05.2011, 17:04   #2  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
Цитата:
Сообщение от griefon Посмотреть сообщение
Данный код работал на тестовой среде, но на сервере заказчика этот код не работает.
Возможно стоит поискать отличия в настройках? Речь идет именно о сервере, или все же про Word на конечном клиенте? Возможно проблема все же в ограничениях безопасности на выполнение макросов или банальном несовпадении версии Office?
Некоторые задачи формирования печатных форм все же проще решать не через слияние, а путем формирования контента из кода. В случае, когда без разработчика обойтись не получится, существенной разницы не вижу.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Старый 23.05.2011, 17:44   #3  
griefon is offline
griefon
Участник
 
131 / 52 (2) ++++
Регистрация: 07.12.2010
Адрес: down under
Цитата:
Сообщение от Артем Enot Грунин Посмотреть сообщение
Возможно стоит поискать отличия в настройках? Речь идет именно о сервере, или все же про Word на конечном клиенте? Возможно проблема все же в ограничениях безопасности на выполнение макросов или банальном несовпадении версии Office?
Версии Офиса одинаковые, безопасность макросов вряд ли при делах - так как макрос все-таки работает. Различия в настройках посмотрю.

Цитата:
Сообщение от Артем Enot Грунин Посмотреть сообщение
Некоторые задачи формирования печатных форм все же проще решать не через слияние, а путем формирования контента из кода. В случае, когда без разработчика обойтись не получится, существенной разницы не вижу.
Согласен, но в случае слияния проще в дальнейшем редактировать формы документов, которые могут меняться. Точнее для редактирования форм требуется меньшая квалификация.
Старый 23.05.2011, 22:55   #4  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
Почему вы считаете что макрос работает, если результатов его работы нет? Возможно я просто не так понял.
Насчет гибкости слияния не спорю, но никто не заставляет полностью отказываться от шаблонов. Аналогично размещению полей слияния можно размещать в шаблоне метки и другие настраиваемые поля, которые будет обрабатывать ваш код. В случае если вы, например, решите создать печатную форму для заказа, то иной возможности поместить в документ таблицу со строками заказа не будет.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Старый 24.05.2011, 15:42   #5  
griefon is offline
griefon
Участник
 
131 / 52 (2) ++++
Регистрация: 07.12.2010
Адрес: down under
Цитата:
Сообщение от Артем Enot Грунин Посмотреть сообщение
Почему вы считаете что макрос работает, если результатов его работы нет? Возможно я просто не так понял.
Смотрел в отладчике.

Цитата:
Сообщение от Артем Enot Грунин Посмотреть сообщение
Насчет гибкости слияния не спорю, но никто не заставляет полностью отказываться от шаблонов. Аналогично размещению полей слияния можно размещать в шаблоне метки и другие настраиваемые поля, которые будет обрабатывать ваш код. В случае если вы, например, решите создать печатную форму для заказа, то иной возможности поместить в документ таблицу со строками заказа не будет.
Дело в том, что заполнять эти поля надо после срабатывания механизма слияния. Точнее для каждой итерации слияния.

С печатными формами заказов и аналогичными формами понятно, но в данном случае такого функционала нет и не планируется.
Старый 25.05.2011, 16:46   #6  
griefon is offline
griefon
Участник
 
131 / 52 (2) ++++
Регистрация: 07.12.2010
Адрес: down under
Я нашел решение, как исправить код, чтобы он работал:

надо Selection.Find заменить на Doc.Range.Find
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Проблема с действиями сервиса(CRM 4.0) Archon Dynamics CRM: Функционал 6 08.07.2009 14:33
Проблема с идентификацией офлайнового клиента на сервере. Что делать? Sinya Dynamics CRM: Администрирование 29 19.03.2009 12:49
Проблема с CallerIdValue deniska Dynamics CRM: Разработка 4 17.02.2009 17:41
Проблема при создании мероприятия ShurikEv Dynamics CRM: Функционал 2 03.11.2008 18:26
Проблема с Add Date and Time в WorkFlow Lida Dynamics CRM: Разработка 4 11.10.2007 17:08

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 22:00.