Название: Как открыть сообщение для редактирования через объектную модель Word? Отправлено: vamos от 11.02.2017, 12:47:45 Добрый день!
Подскажите, плиз, как открыть сообщение (MailItem) для редактирования через объектную модель Word (через свойство Inspector.WordEditor)? (сообщение не новое - а старое, полученное или уже отосланное) Outlook 2010. Руками это делается в окне чтения сообщения в ленте через Сообщение - (Переместить) - Действия - Изменить сообщение. А как это сделать программно? В приведенном ниже коде попытка wdRange.InsertAfter - приводит к ошибке "Run-time error '4605': Метод или свойство недоступны, поскольку документ заблокирован для редактирования." Посмотрел, в wdDoc.ProtectionType стоит "wdAllowOnlyReading". А если вручную открыть на редактирование - то "wdNoProtection". Но попытка сделать wdDoc.Unprotect приводит к ошибке "Run-time error '4605': Данная команда недоступна." В свойствах MailItem или Inspector ничего подходящего не вижу. Если сделать "Изменить сообщение" руками - то приведенный код работает. Подскажите, плиз! Код: (vb)
Название: Re:Как открыть сообщение для редактирования через объектную модель Word? Отправлено: vamos от 11.02.2017, 12:57:14 Сам пока нашел 2 решения, но оба не достаточно хороши.
- wdDoc.Unprotect Оказывается, работает на части писем. Больше половины, но не на всех. К тому же, при попытке сделать wdRange.Find.Execute Outlook "падает" (не на каждом письме, но быстро :)) И эта команда делает всё же не то, что делает кнопка. Сообщение на редактирование открывается, но вордовские вкладки над лентой не появляются. - открыть Inspector и сделать SendKeys Код: (vb) Application.ActiveInspector.Activate Делает то, что нужно. Но делает это долго (на каждое письмо от секунды до нескольких), и может не всегда срабатывать. Хотелось бы всё же как-то делать через объектную модель (скорее всего объекты Outlook, но может быть и Word), но уже всю голову сломал, КАК. Подскажите, плиз! Название: Re:Как открыть сообщение для редактирования через объектную модель Word? Отправлено: Дмитрий Щербаков(The_Prist) от 11.02.2017, 14:55:46 Так а почему не подключаетесь к Outlook и там не правите? Ведь это проще, чем менять через Word. Примеры работы в Outlook есть на сайте в разделе Хитрости.
Название: Re:Как открыть сообщение для редактирования через объектную модель Word? Отправлено: vamos от 12.02.2017, 04:16:04 Так а почему не подключаетесь к Outlook и там не правите? Ведь это проще, чем менять через Word. Примеры работы в Outlook есть на сайте в разделе Хитрости. Дело в том, что вообще мне надо делать замену Строки1 на Строку2.Если Вы имеете в виду через HTMLBody, то задача замены там в моем случае сложна. Все письма какие-то разные, разные форматы, разные кодировки. Тэги в разных местах понатыканы.... Даже письма, копипастенные с одного вордовского шаблона, отличаются почему-то. Название: Re:Как открыть сообщение для редактирования через объектную модель Word? Отправлено: Дмитрий Щербаков(The_Prist) от 12.02.2017, 11:18:34 Нет, я имею ввиду подключиться к Outlook и из него сделать правку. Как Вы руками правите? Можете прямо по шагам описать процесс? Может я чего не так понимаю просто. После того как опишите - можно будет уже более конкретное что-то посоветовать или предложить.
Название: Re:Как открыть сообщение для редактирования через объектную модель Word? Отправлено: vamos от 13.02.2017, 13:56:00 Пока не нашел то, что нужно, прям в самих объектах.
Но нашел, как через объекты симулировать нажатие "Изменить сообщение" без SendKeys: Код: (vb) Insp.CommandBars.ExecuteMso ("EditMessage") Ну и что-то типа такого при имеющемся MailItem: Код: (vb) Dim Insp As Inspector, MI As MailItem (DoEvents, возможно, не нужно) Название: Re:Как открыть сообщение для редактирования через объектную модель Word? Отправлено: vamos от 13.02.2017, 14:25:27 Нет, я имею ввиду подключиться к Outlook и из него сделать правку. Как Вы руками правите? Можете прямо по шагам описать процесс? Может я чего не так понимаю просто. После того как опишите - можно будет уже более конкретное что-то посоветовать или предложить. Я пишу макрос в Аутлуке. Из Аутлука выбираю MailItem (подробности опущу). У него беру инспектора (через MailItem.GetInspector), у которого получаю объектную модель Word данного письма (через Inspector.WordEditor). Которая закрыта для редактирования (прочитать всё могу - написать нет). Вопрос в том, как ее "разлочить" для редактирования.Встречал много примеров, где она просто применяется без разлочивания - но это работает для новых писем, только что созданных. Создал новый MailItem - вот у тебя разлоченный Inspector.WordEditor. Сразу можно редактировать. А мне надо заменять в старых письмах (уже отосланных или уже полученных). Они так просто не редактируются (выдает ошибку, описанную в первом посте). Конкретно по шагам что надо сделать руками для получения нужного результата на примере одного письма: 1. Открыть письмо (окно сообщения aka Inspector). 2. Выбрать "Изменить сообщение" (через Ленту: Сообщение - Действия - Изменить сообщение). 3. Нажать Ctrl+H - открывается окно замены (либо мышкой через Ленту: Сообщение - Найти - Заменить) 4. Ввести Строку1, Строку2 (заменяемое, заменяющее). 5. Нажать "Заменить все" 6. Нажать "Закрыть" в окне "Найти и заменить" 7. Нажать "Закрыть" в окне сообщения. Впрочем, решение (через Commandbars, т.е. симуляцию нажатия кнопки Ленты) я уже нашел. В принципе, в последнее время я именно про такое решение думал. Лучше будет только если есть какое-то решение через именно свойства и методы "натуральных" объектов (типа Inspector, MailItem, Application и т.п.). |