【问题标题】:Outlook 2007 - VBA macro in NormalEmail.dotmOutlook 2007 - NormalEmail.dotm 中的 VBA 宏
【发布时间】: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 中创建它们,但需要安装程序而不是简单地部署模板)。

所以。有什么想法可以让我做我想做的所有事情吗?

  1. 覆盖电子邮件编辑器功能区上项目符号/数字按钮的行为。
  2. 在 NormalEmail.dotm 文件中部署宏,而不必“安装”它们。
  3. 不会使 Outlook 崩溃。

【问题讨论】:

  • 要跟进 justnS 的评论,是哪一行导致了该错误?另请注意,如果您引用 Outlook 对象库,则需要限定对“应用程序”的引用,如下所示:Word.Application、Outlook.Application 等。
  • 正如我所说,几乎所有引用 Word 对象模型的东西 - 应用程序、选择、ActiveDocument 等(尽管我在上面的行中没有收到 ThisDocument 等错误 - 它确实但是正如我提到的那样崩溃 Outlook)。所以,如果整个方法是这一行:“MsgBox TypeName(Application)”,就可以了。当我想修改 Word“文档”的内容时,我仍然看不到任何引用 Outlook 对象库的理由...

标签: vba outlook outlook-2007 office-2007


【解决方案1】:

您是否尝试将 VBA 编辑器中的引用添加到 Microsoft Outlook 对象库?

【讨论】:

  • 我读到了 OP 的问题,意思是他正试图从 Outlook 执行此操作,在这种情况下,他已经引用了 Outlook 对象库。
  • 他想将宏部署到 NormalEmail.dotm... 默认应用程序是 Word。因此,在 Word 文件中编辑宏不会默认设置 Outlook 引用。
  • @JP:justnS 是正确的 - VBA 代码在 Word 中,没有引用 Outlook 对象库。 (但是...)
  • @justnS:我不确定这会有什么帮助?这是我正在尝试修改的(基于 Word 的)电子邮件,那么访问 Outlook 对象模型对我有何帮助?
【解决方案2】:

在 Outlook 2007 中,您可能还必须添加对“Microsoft Word 12.0 对象库”和“Microsoft Forms 2.0 对象库”的 VBA 引用。不同版本可能适用于其他版本年份。

此外,在宏/代码中,您必须设置对象以获取/使用正确的方法和属性。

我不是 OO 程序员,通常会从其他地方复制代码并根据我的需要进行修改,所以我无法提供比我上面所说的更多的帮助。 (而且我的一个宏也给了我同样的 429 错误。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-13
    • 1970-01-01
    • 1970-01-01
    • 2010-11-13
    • 1970-01-01
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    相关资源
    最近更新 更多