【问题标题】:Programmatically adding References to Outlook 2010 in VBA以编程方式在 VBA 中添加对 Outlook 2010 的引用
【发布时间】:2012-08-31 20:04:44
【问题描述】:

我有一个用于 Outlook 的宏,它部分地编辑电子邮件或日历项目的内容,这需要添加“Microsoft Word 14.0 对象库”参考。我知道如何在 Excel ActiveWorkbook.VBProject.References.AddFromGuid() 中执行此操作,但在 Outlook 中找不到有关执行此操作的任何信息。

有可能吗?

每个 Remou 的示例代码:

Sub CreateNotesEmailFromAppointment()
  Dim oMeeting As AppointmentItem
  Dim oEmailTemplate As Outlook.MailItem
  Dim oEmailWordDoc As Word.Document

  If Application.ActiveInspector.CurrentItem.Class = olAppointment Then
    Set oMeeting = Application.ActiveInspector.CurrentItem
    Set oEmailTemplate = Application.CreateItemFromTemplate(PathToTemplateFile)
    oEmailTemplate.Display
    Set oEmailWordDoc = Application.ActiveInspector.WordEditor

    With oEmailWordDoc.Content.Find
        .Text = "<Date>"
        .Replacement.Text = Month(oMeeting.Start) & "/" & Day(oMeeting.Start)
        .Execute Replace:=wdReplaceAll
    End With
    'More editing and formatting of oEmailWordDoc follows'
  End If
End Sub

【问题讨论】:

  • 当我将 Dim oEmailWordDoc As Word.Document 更改为 Dim oEmailWordDoc As Object 时,代码会使用 Outlook 模板为我运行
  • 有趣。当我已经启用了 Word 对象库引用时,它可以正常工作。但是,当我没有 Word 对象库引用时,子程序根本不会执行(例如,我将 debug.print 行作为第一行但它没有执行)。我想知道这是否与我的 Outlook 版本(2010,64 位)有关?
  • 我用 2013 64 位测试过,我无法想象它有那么大的不同。我可能有时间再看一下。
  • 是的,很有趣。如果 Word 库存在,则进行替换,否则不进行替换。
  • 我添加了一个关于不同方法的注释。

标签: vba outlook outlook-2010


【解决方案1】:

考虑后期绑定:

Dim wd As Object

Set wd = CreateObject("Word.Application")
wd.Visible = True
wd.Documents.Open "C:\Docs\Temp.doc"

如果 Word 的实例可能正在运行:

On Error Resume Next
Set wd = GetObject(,"Word.Application")

If Err.Number <> 0 Then
   Set wd = CreateObject("Word.Application")
End If

wd.Visible = True

这是 2002 年的,但比最近的参考更好:http://support.microsoft.com/kb/307216

不使用 word 而是使用模板的 HTMLBody 的不同方法怎么样:

  Dim oMeeting As AppointmentItem
  Dim oEmailTemplate As Outlook.MailItem

  If Application.ActiveInspector.CurrentItem.Class = olAppointment Then
    Set oMeeting = Application.ActiveInspector.CurrentItem
    Set oEmailTemplate = Application.CreateItemFromTemplate(PathToTemplateFile)
    oEmailTemplate.Display
    oEmailTemplate.HTMLBody = _
       Replace(oEmailTemplate.HTMLBody, "&lt;date&gt;", Month(oMeeting.Start) _
          & "/" & Day(oMeeting.Start))
  End If

【讨论】:

  • 感谢 Remou - 但这对我不起作用。我需要将对象作为(例如)Word.Document 对象进行调暗,但我正在使用 Outlook.Inspector.WordEditor 将该对象设置为一个值。当我从引用中删除 Word 对象库时,子/函数不会运行。
  • 发布示例子的部分内容。
  • 这行得通 - 谢谢!不是我问这个问题时要找的东西,但它完成了工作。
【解决方案2】:

出于安全原因,我发现 Outlook VBA 不允许这样做。或许创建一个插件会是一个解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    • 2012-04-10
    • 2014-12-09
    • 2013-07-14
    相关资源
    最近更新 更多