【发布时间】:2011-12-27 05:00:51
【问题描述】:
我有一个 Word 2007 模板,用作 Normal.dotm,它具有企业主题、样式等,以及一些宏代码,它覆盖了功能区上项目符号和数字按钮的默认行为。
我现在想在 Outlook 2007 中创建电子邮件时使用相同的模板。我尝试将我的 Normal.dotm 复制到 NormalEmail.dotm,并且在某种程度上这可行,但尽管我的宏是正确的 invoked 当我在电子邮件编辑器中按下项目符号/数字按钮时,它会给出错误:
运行时错误 429:ActiveX 组件无法创建对象
经过进一步调查,似乎我在宏中执行的任何引用普通 Word 对象模型(应用程序、选择等)中的对象的操作都会导致此错误。因此,即使我的宏包含以下内容,它仍然会失败:
MsgBox TypeName(Application)
我有一种暗示,这是因为我在 Outlook 上下文中运行,而不是 Word,因此可能没有 (Word) 应用程序或任何与之关联的对象。我知道 Outlook 中的电子邮件编辑器是 Word-but-not-as-we-know-it-it-Jim。
话虽如此,我确实发现 ThisDocument 确实返回了一个有效的 Document 对象;不幸的是,它对应于模板本身,而不是正在编辑的电子邮件。
经过反复试验,我发现我可以通过以下迂回路线(显示电子邮件中的文本)获取与电子邮件对应的文档:
MsgBox ThisDocument.MailEnvelope.Item.Application.ActiveInspector.WordEditor.Content.Text
但是,此代码似乎也会导致 Outlook 崩溃 - 不是当时,而是稍后,当您关闭 Outlook 时。
此时,我已经准备好认输了。毫无疑问,在 Outlook 中创建宏的“正确”方法是在 Outlook 本身中创建它们,但根据我有限的经验,这只是可怕。 (您可以在 VBA 中创建宏,但不能部署它们;或者,您可以在 VSTO 中创建它们,但需要安装程序而不是简单地部署模板)。
所以。有什么想法可以让我做我想做的所有事情吗?
- 覆盖电子邮件编辑器功能区上项目符号/数字按钮的行为。
- 在 NormalEmail.dotm 文件中部署宏,而不必“安装”它们。
- 不会使 Outlook 崩溃。
【问题讨论】:
-
要跟进 justnS 的评论,是哪一行导致了该错误?另请注意,如果您引用 Outlook 对象库,则需要限定对“应用程序”的引用,如下所示:Word.Application、Outlook.Application 等。
-
正如我所说,几乎所有引用 Word 对象模型的东西 - 应用程序、选择、ActiveDocument 等(尽管我在上面的行中没有收到 ThisDocument 等错误 - 它确实但是正如我提到的那样崩溃 Outlook)。所以,如果整个方法是这一行:“MsgBox TypeName(Application)”,就可以了。当我想修改 Word“文档”的内容时,我仍然看不到任何引用 Outlook 对象库的理由...
标签: vba outlook outlook-2007 office-2007