2

在继续执行我的脚本之前,我想检查配置了 Outlook 帐户的交换服务器是否可用。目前,我不检查,如果存在连接问题,脚本将永远挂在这一行

Set m_objNS = m_objOutlook.GetNamespace("MAPI")

并显得反应迟钝。

如果在 Outlook API 中无法做到这一点,有没有办法可以检索交换服务器地址并 ping 它或在 .GetNameSpace 函数上设置 20 秒超时?

更新:如果网络适配器有问题(比如它被禁用),代码可以访问命名空间对象。交换模式将始终为 400,直到出现授权代码的提示并且用户接受它。但是,如果存在真正的(非测试目的问题),例如交换服务器已关闭(目标主机无法访问),Outlook 会在“尝试连接”状态下空闲,并且您无法访问 .Session 对象或 MAPI。

必须有一种方法来判断服务器是否已关闭。

4

2 回答 2

3

Excel 可以返回带有一系列值的状态。您可以执行 If then else 以不同方式响应状态。值得注意的是,如果它“正在尝试连接”,则至少在 Outlook 2010 中报告它已断开连接 (300)。

这是返回值的代码(其中的 msgbox 只是为了便于测试)。代码注释中的参考值,但也可在此处获得:http: //msdn.microsoft.com/en-us/library/office/ff868474 (v=office.14).aspx

Sub CheckExchangeStatus()
'olCachedConnectedDrizzle    olCachedConnectedFull   olCachedConnectedHeaders    olCachedDisconnected    olCachedOffline olDisconnected  olNoExchange    olOffline   olOnline
'600                           700                      500                         400                     200             300             0               100         800

 Dim olApp As New Outlook.Application
 Dim olNameSpace As Outlook.NameSpace

 Set olNameSpace = olApp.GetNamespace("MAPI")
 Dim ExchangeStatus  As OlExchangeConnectionMode

 ExchangeStatus = olNameSpace.ExchangeConnectionMode
 MsgBox (ExchangeStatus)

End Sub
于 2014-06-07T00:39:59.910 回答
1

不确定您的脚本在不知道的情况下这样做是我的建议。

使用会话对象来确定帐户是否离线。

假设 m_objOutlook 是 Outlook.Application 对象

m_objOutlook.Session.Offline

或使用 ExchangeConnectionMode

objOutlook.Session.ExchangeConnectionMode 

并检查以下之一

            olOffline
            olNoExchange
            olDisconnected
            olCachedOffline
            olCachedDisconnected
于 2013-08-15T17:21:11.810 回答