Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 24871|回复: 22

[分享] ExcelVBA调用Outlook对象

[复制链接]
发表于 2009-10-13 04:47 | 显示全部楼层 |阅读模式
本帖最后由 爱疯 于 2012-7-17 10:32 编辑

本文起源自一位会员的求助(http://www.excelpx.com/forum.php?mod=viewthread&tid=94580&extra=&page=1#94580

为了自动化Outlook,使Excel的VBA能调用Outlook对象,我们必须先访问Outlook的对象模型。也就是说,在Excel里操纵Outlook的对象,你必须首先能够让Excel“看到”它们。 通常有两种方法可以公开一个对象模型到Excel应用程序,称为前期绑定和后期绑定。 

绑定的意思就是把客户端的对象模型开放给主程序,把他们强制性的联系在一起。这里我们就是指把Outlook对象模型开放给ExcelVBA主程序。 


前期绑定

前期绑定,意思就是在你的程序运行前就已经进行了绑定,绑定的方法是在VBE编辑器里点击工具-引用,选上Microsoft Outlook 11.0 Object Library。(Outlook的版本不同,数字会有变化,我用的是2003,版本是11.0) 




以下一段代码是前期绑定后,打开收件箱第2封邮件的代码(按主题排序):

 Sub OpenMail_1()
    Dim myOlApp As New Outlook.Application
    Dim myNameSpace As Object
    Dim myFolder As Object
    Dim myItem As Object

    Set myNameSpace = myOlApp.GetNamespace("MAPI")
    Set myFolder = myNameSpace.GetDefaultFolder(olFolderInbox)
    Set myItem = myFolder.Items(2)
    myItem.Display
End Sub


后期绑定

后期绑定就是在程序运行的时候才进行绑定,不需要事先引用Microsoft Outlook 11.0 Object Library,而是需要运用GetObject和CreateObject函数。 

以下代码同样是实现:打开收件箱第2封邮件(按主题排序):

Sub OpenMail_2()
    Dim myOlApp As Object
    Dim myNameSpace As Object
    Dim myFolder As Object
    Dim myItem As Object

    '如果outlook已经打开,直接取Outlook实例,如果没有打开,则创建一个Outlook实例
    '(我不喜欢多打开一个Outlook窗口)[em01]

    On Error Resume Next
    Set myOlApp = GetObject(, "Outlook.Application")
    If Err.Number = 429 Then
        Set myOlApp = CreateObject("Outlook.application")
    End If

   
Set myNameSpace = myOlApp.GetNamespace("MAPI")
    '后期绑定对象库的时候,GetDefaultFolder类型不能常量“olFolderInbox”表示
    '要用参考值来表示,olFolderInbox的参考值为6

    Set myFolder = myNameSpace.GetDefaultFolder(6)
    Set myItem = myFolder.Items(2)
    myItem.Display

End Sub


这里有一个小小的不同之处: 

前期绑定用的是 GetDefaultFolder(olFolderInbox)
后期绑定用的是
GetDefaultFolder(6)

 olFolderInbox是Outlook的一个内置对象模型,在后期绑定对象库的时候不会开放给Excel,不能被ExcelVBA识别,因此不能用常量的形式(olFolderInbox)表示,只能用参考值(6)来表示。 

从以上看来,前期绑定的代码更容易进行理解和调试,但是,当我们要共享文档的时候,就会出现问题了,因为不能保证每个人用的Outlook版本都和你的一样,如果不一样的话,对象库也会不一样,这时用前期绑定的程序就会报错。而用后期绑定的话,可以不用理会别人的版本是什么,都可以运行。因此我会更喜欢用后期绑定[em01]

[此贴子已经被作者于2009-10-13 5:01:50编辑过]

[原创]ExcelVBA调用Outlook对象

[原创]ExcelVBA调用Outlook对象
发表于 2009-10-13 07:24 | 显示全部楼层
回复

使用道具 举报

发表于 2009-10-13 10:06 | 显示全部楼层

肯定是写完帖子没点发表就睡着了。后来醒了才发的

[em05]
回复

使用道具 举报

发表于 2009-10-13 13:44 | 显示全部楼层

QUOTE:
以下是引用leolee82在2009-10-13 10:06:00的发言:

肯定是写完帖子没点发表就睡着了。后来醒了才发的

[em05]

胡说[em03]
回复

使用道具 举报

发表于 2009-10-13 13:49 | 显示全部楼层

喵喵辛苦了

 

[em24]
回复

使用道具 举报

发表于 2009-10-13 16:29 | 显示全部楼层

谢谢喵老师....你永远是我的好老师,也是启蒙老师...

[em07]

我明白是和字典的引用方法一样,,,但我一直找不到Microsoft Outlook 11.0 Object Library类似的引用...

不过经过喵老师的提醒,我一个一个的慢慢找终于被我找到了Microsoft Outlook 12.0 Object Library

谢谢,,,,也请各位有类似的同学,要耐心的找找,,,在里面的,,,呵呵...

对于喵老师这样的高手,应该都是喜欢后期绑定的,,,但前期绑定的好处,就是在对象的"."后会自己提示相关属性与方法,这对我们新入门的学员来说,是很有帮助的...

呵呵...喵老师,很喜欢你的讲课风格...(受益匪浅...)

学生:粉丝fssunnymen 敬上

[em17][em20][em20][em20]
[此贴子已经被作者于2009-10-13 16:49:42编辑过]
回复

使用道具 举报

发表于 2009-10-14 06:18 | 显示全部楼层

学习[em02][em02]
回复

使用道具 举报

发表于 2009-10-15 02:25 | 显示全部楼层

学习了,谢谢分享,以后碰到类似的问题就知道怎么办了。
回复

使用道具 举报

发表于 2009-10-15 07:18 | 显示全部楼层

谢谢分享       
回复

使用道具 举报

发表于 2009-10-16 17:50 | 显示全部楼层

[em02]太帅了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-20 17:40 , Processed in 0.319520 second(s), 6 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表