Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.02.2017, 15:16   #1
vamosss
 
Регистрация: 18.01.2016
Сообщений: 7
По умолчанию VBA Outlook: Как открыть сообщение для редактирования через объектную модель Word?

Добрый день!

Подскажите, плиз, как открыть сообщение (MailItem) для редактирования через объектную модель Word (через свойство Inspector.WordEditor)?
(сообщение не новое - а полученное или уже отосланное)
Outlook 2010.

Руками это делается в окне чтения сообщения в ленте через Сообщение - Переместить - Действия - Изменить сообщение. А как это сделать программно?

В приведенном ниже коде попытка sRange.InsertAfter - приводит к ошибке "Run-time error '4605': Метод или свойство недоступны, поскольку документ заблокирован для редактирования."
Посмотрел, в sDoc.ProtectionType стоит "wdAllowOnlyReading". А если вручную открыть на редактирование - то "wdNoProtection".
Но попытка сделать sDoc.Unprotect приводит к ошибке "Run-time error '4605': Данная команда недоступна."

В свойствах MailItem или Inspector ничего подходящего не вижу.
Если сделать "Изменить сообщение" руками - то приведенный код работает.

Подскажите, плиз!

PS. Не нашел раздела по Outlook - поэтому пишу в этой теме...

Private Sub test1()
Dim Msg As MailItem, AI As Inspector, sDoc As Word.Document, sRange As Word.Range
Set AI = ActiveInspector
Set Msg = AI.CurrentItem
Set sDoc = AI.WordEditor
Set sRange = sDoc.Range(0, 0)
sRange.InsertAfter "[Вставленный текст]"
End Sub
vamosss вне форума Ответить с цитированием
Старый 06.02.2017, 16:01   #2
vamosss
 
Регистрация: 18.01.2016
Сообщений: 7
По умолчанию

На всякий добавлю, что можно, конечно, делать через .HTMLBody, но для основной задачи (функции замены строки1 на строку2) он хуже, т.к. там могут куда-либо вклиниться тэги, а отлавливать их - это отдельный гемор...
К тому же, некоторые письма в HTML выглядят неожиданно (состоят не из нормальных знаков, а из их кодов а-ля & # 1088 ; ).
Короче, надо будет либо писать какой-то мегакод вместо небольшого и понятного, либо доделывать руками.
Модель Word, мне кажется, всё бы решила...
vamosss вне форума Ответить с цитированием
Старый 07.02.2017, 16:44   #3
vamosss
 
Регистрация: 18.01.2016
Сообщений: 7
По умолчанию

Всю голову себе сломал.
По 7 раз пересмотрел членов MailItem, Inspector, Application, Word.Document и бог знает чего еще...
Почитал несколько учебников, где про Аутлук пишут... но всё мимо
Ничего не нахожу рабочего

Кажется, нашел решение через SendKeys:
Application.ActiveInspector.Activat e
SendKeys "%TCC", True - делает симуляцию нажатия кнопки "Изменить сообщение"

В тесте, вроде, отрабатывает. Надеюсь, и в бою будет...
Но буду рад если кто подскажет решение через объекты всё же!
Т.к. более надежно и понятно. И более быстро, наверное...
vamosss вне форума Ответить с цитированием
Старый 09.02.2017, 06:32   #4
vamosss
 
Регистрация: 18.01.2016
Сообщений: 7
По умолчанию

SendKeys работает, но долго.
Так что тема по-прежнему актуальна!
vamosss вне форума Ответить с цитированием
Старый 09.02.2017, 15:20   #5
vamosss
 
Регистрация: 18.01.2016
Сообщений: 7
По умолчанию

Как выясняется, sDoc.Unprotect работает. Но не на всех сообщениях. На каких-то работает, на каких-то нет. От чего зависит, не понятно.

По-прежнему очень надеюсь на ответ, как через VBA в инспекторе сделать "Сообщение - Действия - Изменить сообщение" без SendKeys!
vamosss вне форума Ответить с цитированием
Старый 13.02.2017, 13:52   #6
vamosss
 
Регистрация: 18.01.2016
Сообщений: 7
По умолчанию

Пока не нашел то, что нужно, прям в самих объектах.
Но нашел, как через объекты симулировать нажатие "Изменить сообщение" без SendKeys:
Insp.CommandBars.ExecuteMso ("EditMessage")

Ну и что-то типа такого при имеющемся MailItem:
Код:
Dim Insp As Inspector, MI As MailItem
Set Insp = MI.GetInspector
Insp.Activate: DoEvents
Insp.CommandBars.ExecuteMso ("EditMessage"): DoEvents
(DoEvents возможно не нужны)
vamosss вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как открыть файл word в C++ Builder для запослнения анютка10 Общие вопросы C/C++ 3 08.06.2012 01:06
Как обратиться к свойствам Sharepoint в Word через VBA макрос? Kypo Microsoft Office Word 2 06.10.2011 12:06
Как отправить Access-ом сообщение по Outlook? ИгнатАлт Microsoft Office Access 2 23.11.2007 18:47
Как Web документ(htm, mht, и т.д.) открыть через Word? Yelzhas Общие вопросы Delphi 4 18.11.2007 20:14
Как открыть для редактирования ID3-тэги mp3-файлов? Delphi yourself Мультимедиа в Delphi 2 13.11.2007 02:16