Outlook 2007 - NormalEmail.dotm中的VBA宏

时间:2011-11-11 17:16:12

标签: vba outlook outlook-2007 office-2007 outlook-vba

我有一个Word 2007模板,我用作Normal.dotm,它有公司主题,样式等,加上一小部分宏代码,它们会覆盖子弹的默认行为。功能区上的数字按钮。

我现在想在Outlook 2007中创建电子邮件时使用相同的模板。我曾尝试将Normal.dotm复制到NormalEmail.dotm,并且在某种程度上这是有效的,但是我的宏是正确的调用,它会出错:

  

运行时错误429:ActiveX组件无法创建对象

在进一步调查中,似乎我在宏中引用正常Word对象模型(应用程序,选择等)中的对象的任何操作都会导致此错误。因此,即使我的宏包含以下内容,它仍然会失败:

MsgBox TypeName(Application)

我知道这是因为我在Outlook的上下文中运行,而不是Word,因此可能没有(Word)应用程序或与之关联的任何对象。我知道Outlook中的电子邮件编辑器是Word,但不是我们所知道的Jim。

话虽如此,我确实发现ThisDocument 返回一个有效的Document对象;不幸的是,它对应于模板本身,而不是正在编辑的电子邮件。

通过反复试验,我发现我可以通过以下迂回路线获取与电子邮件相对应的文档(这会显示电子邮件中的文字):

  

MsgBox ThisDocument.MailEnvelope.Item.Application.ActiveInspector.WordEditor.Content.Text

但是,此代码似乎也会导致Outlook崩溃 - 当时不是,但稍后,当您关闭Outlook时。

此时,我正准备承认失败。毫无疑问,在Outlook中创建宏的“正确”方法是在Outlook中创建它们,但是从我有限的经验来看,这只是可怕的。 (您可以在VBA中创建宏,但不能部署它们;或者,您可以在VSTO中创建它们,但是您需要安装程序而不是简单地部署模板。)

因此。有什么想法会让我做我希望做的所有事情吗?

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

在Outlook 2007中,您可能还必须将VBA引用添加到" Microsoft Word 12.0对象库"也许" Microsoft Forms 2.0对象库"。不同版本可能适用于其他版本年份。

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

我不是OO程序员,通常会从其他地方复制代码并根据我的需要进行修改,因此我的帮助远远超过我上面所说的。 (我的一个宏也给了我同样的429错误。)

相关问题