我想在继续编写脚本之前检查配置了Outlook帐户的Exchange服务器是否可用。目前,我没有检查,如果存在连接问题,脚本将永远挂在此行
Set m_objNS = m_objOutlook.GetNamespace("MAPI")
并且似乎没有反应。
如果在Outlook API中无法做到这一点,有没有办法可以检索交换服务器地址并对其进行ping操作或在.GetNameSpace函数上设置20秒超时?
更新:如果网络适配器出现问题(如果已禁用),则代码可以访问命名空间对象。交换模式将始终为400,直到有提示授权代码并且用户接受它。但是,如果有一个真实的(非测试目的问题),如交换服务器已关闭(目标主机无法访问),Outlook处于“尝试连接”状态并且您无法访问.Session对象或MAPI。
必须有办法判断服务器是否已关闭。
答案 0 :(得分:3)
Excel可以使用一系列值返回状态。您可以执行If,然后以不同方式响应状态。值得注意的是,如果它是"试图连接"它至少在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
答案 1 :(得分:1)
不确定你的脚本是做什么的,不知道这是我的建议。
使用会话对象来确定帐户是否处于脱机状态。
假设m_objOutlook是一个Outlook.Application对象
m_objOutlook.Session.Offline
或使用ExchangeConnectionMode
objOutlook.Session.ExchangeConnectionMode
并检查以下其中一项
olOffline
olNoExchange
olDisconnected
olCachedOffline
olCachedDisconnected