vba Outlook 对象库不会在版本 12 和 14 之间切换
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/11196432/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Outlook Object Library Does Not Switch Between Versions 12 And 14
提问by ForEachLoop
I have a .dotm template file on a network share. There are macros with references to the Word, Office, and Outlook object libraries. We use two different platforms, Windows XP and Windows 7, along with Microsoft Office 2007 and Office 2010. When users open the template file the references for Word and Office adjust automatic and accordingly (that is, they're set to Microsoft Word 12 Object Library or Microsoft Word 14 Object Library as needed), and the macros run without a problem.
我在网络共享上有一个 .dotm 模板文件。有一些宏引用了 Word、Office 和 Outlook 对象库。我们使用两个不同的平台,Windows XP 和 Windows 7,以及 Microsoft Office 2007 和 Office 2010。当用户打开模板文件时,Word 和 Office 的引用会自动相应地调整(也就是说,它们被设置为 Microsoft Word 12 Object库或 Microsoft Word 14 对象库(根据需要),并且宏运行没有问题。
Microsoft Outlook Object Library switches properly from version 12 to 14. It does not switch properly from version 14 to 12. In that case, it gives the error that the libary is not found. Is this a bug? Is there a workaround? Something I'm overlooking?
Microsoft Outlook 对象库从版本 12 正确切换到 14。它不能从版本 14 正确切换到 12。在这种情况下,它会给出找不到库的错误。这是一个错误吗?有解决方法吗?我忽略了什么?
采纳答案by HymanOrangeLantern
ForEachLoop,
ForEachLoop,
It appears that your question has largely been answered. I will merely add a bit of information for clarity's sake, and to provide this question with an answer. A user on the Microsoft Forums, Ossiemac, noted that LateBinding was the way to go, as has been stated by Siddarth Rout. As implied by Siddarth, that means you do not have to worry about references.
看来您的问题已基本得到解答。为了清楚起见,我只会添加一些信息,并为这个问题提供答案。微软论坛上的一位用户 Ossiemac 指出,正如 SiddarthRout 所说的那样,LateBinding 是要走的路。正如 Siddarth 暗示的那样,这意味着您不必担心引用。
Ossiemac provided some sample code for using the LateBinding in the sending of an email, which I have reformatted and placed here:
Ossiemac 提供了一些示例代码,用于在发送电子邮件时使用 LateBinding,我已将其重新格式化并放置在这里:
Private Sub btnLateBindMethod_Click()
' Variables used for LateBinding
Dim objOutlook As Object 'Outlook.Application
Dim objEmail As Object 'Outlook.MailItem
Dim objNameSpace As Object 'Outlook.NameSpace
Const OutLookMailItem As Long = 0 'For Late Binding
Const OutLookFolderInbox As Long = 6 'For Late Binding
Const OutLookFormatHTML As Long = 2 'For Late Binding
Dim strSubject As String
Dim strAddress As String
On Error Resume Next
Set objOutlook = GetObject(, "Outlook.Application")
On Error GoTo 0
If objOutlook Is Nothing Then
Set objOutlook = CreateObject("Outlook.Application")
Set objNameSpace = objOutlook.GetNamespace("MAPI")
objNameSpace.GetDefaultFolder(OutLookFolderInbox).Display
End If
Set objEmail = objOutlook.CreateItem(OutLookMailItem)
strSubject = "Hello World"
With objEmail
'.To = strToAddress 'Commented to prevent accidental send
.Subject = strSubject
.BodyFormat = OutLookFormatHTML
.Display
'Full Name of window can change depending on Tools -> Options -> Mail Format
'Changing this option for outgoing mail changes the window name.
'However, AppActivate appears not to require entire name but needs up to end
'of - Message which is included in heading following the Subject string
'irrespective of the Mail Format option chosen.
AppActivate (strSubject & " - Message")
End With
End Sub
Jimmy Pena has an article discussing the contrast of EarlyBinding and LateBinding-
Jimmy Pena 有一篇文章讨论了EarlyBinding 和 LateBinding的对比-
~JOL
~JOL