#vba #outlook #outlook-2007 #office-2007
#vba #outlook #outlook-2007 #office-2007
Вопрос:
У меня есть шаблон Word 2007, который я использую как обычный.dotm, Который имеет корпоративную тему, стили и т.д., Плюс небольшой фрагмент кода макроса, который переопределяет поведение кнопок маркера и цифр по умолчанию на ленте.
Теперь я хотел бы использовать этот же шаблон при создании электронных писем в Outlook 2007. Я попытался просто скопировать мой Normal.dotm в NormalEmail.dotm, и до некоторой степени это работает, но, хотя мой макрос правильно вызывается, когда я нажимаю маркерные / цифровые кнопки в редакторе электронной почты, он выдает ошибку:
Ошибка времени выполнения 429: компоненту ActiveX не удается создать объект
При дальнейшем исследовании кажется, что все, что я делаю в своем макросе, который ссылается на объект в обычной объектной модели Word (приложение, выбор и т.д.), Вызывает эту ошибку. Итак, даже если мой макрос состоит из следующего, он все равно завершается с ошибкой:
MsgBox TypeName(Application)
У меня есть подозрение, что это потому, что я работаю в контексте Outlook, а не Word, и поэтому, возможно, нет приложения (Word) или какого-либо из объектов, связанных с ним. Я знаю, что редактор электронной почты в Outlook является Word-но-не-таким-каким-мы-его-знаем-Jim.
Сказав это, я обнаружил, что ThisDocument действительно возвращает действительный объект Document ; к сожалению, он соответствует самому шаблону, а не редактируемому электронному письму.
Методом проб и ошибок я обнаружил, что могу получить документ, соответствующий электронному письму, следующим обходным путем (при этом отображается текст в электронном письме):
Отправьте этот документ в MsgBox.MailEnvelope.Item.Приложение.ActiveInspector.Редактор Word.Содержание.Текст
Однако этот код, похоже, также приводит к сбою Outlook — не в данный момент, а позже, когда вы закроете Outlook.
На данный момент я почти готов признать поражение. Без сомнения, «правильный» способ создания макросов в Outlook — это создавать их в самом Outlook, но, исходя из моего ограниченного опыта, это просто ужасно. (Вы можете создавать макросы в VBA, но вы не можете их развернуть; или вы можете создать их в VSTO, но тогда вам нужен установщик, а не просто развертывание шаблона).
Итак. Есть какие-нибудь идеи, которые позволили бы мне сделать все, что я надеялся сделать?
- Переопределите поведение маркерных / цифровых кнопок на ленте в редакторе электронной почты.
- Разверните макросы в файле NormalEmail.dotm вместо того, чтобы их «устанавливать».
- Не сбой Outlook.
Комментарии:
1. Чтобы продолжить комментарий justnS, какая строка вызывает эту ошибку? Также обратите внимание, что если вы ссылаетесь на библиотеку объектов Outlook, вам нужно будет указать ссылки на «Приложение» следующим образом: Word. Приложение, Outlook. Приложение и т.д.
2. Как я уже сказал, практически все, что ссылается на объектную модель Word — Application, Selection, ActiveDocument и т.д. (хотя я не получаю ошибку с этим документом и т.д. В строке выше — это, однако, приводит к сбою Outlook, как я упоминал). Итак, если весь метод состоит из одной строки: «Имя типа MsgBox (Application)», этого будет достаточно. Я по-прежнему не вижу причин ссылаться на библиотеку объектов Outlook, когда я хочу изменить содержимое Word «документ»…
Ответ №1:
Вы пробовали добавлять ссылку в редакторе VBA в библиотеку объектов Microsoft Outlook?
Комментарии:
1. Я прочитал вопрос OP, означающий, что он пытается сделать это из Outlook, и в этом случае у него уже была бы ссылка на библиотеку объектов Outlook .
2. Он хочет развернуть макросы в NormalEmail.dotm… Приложением по умолчанию для этого является Word. Таким образом, при редактировании макросов в файле Word ссылка Outlook по умолчанию не была бы установлена.
3. @JP: justnS верен — код VBA находится в Word, без ссылки на библиотеку объектов Outlook. (Однако …)
4. @justnS: Я не уверен, как это поможет? Это электронное письмо (на основе Word), которое я пытаюсь изменить, так как доступ к объектной модели Outlook поможет мне здесь?
Ответ №2:
В Outlook 2007 вам также может потребоваться добавить ссылки VBA на «Библиотеку объектов Microsoft Word 12.0» и, возможно, «Библиотеку объектов Microsoft Forms 2.0». Для версий других лет могут применяться другие версии.
Кроме того, в макросе / коде вы должны настроить объекты для получения / использования правильных методов и свойств.
Я не OO-программист и обычно копирую код из другого места и изменяю под свои нужды, поэтому я не могу помочь намного больше, чем то, что я сказал выше. (И один из моих макросов также выдает мне ту же ошибку 429, что и вы.)