2

スクリプトを続行する前に、Outlook アカウントで構成された Exchange サーバーが使用可能かどうかを確認したいと考えています。現在、私は確認していません。接続の問題がある場合、スクリプトはこの行で永久にハングします

Set m_objNS = m_objOutlook.GetNamespace("MAPI")

そして無反応に見える。

Outlook API 内からそれを行う方法がない場合、Exchange サーバーのアドレスを取得して ping を実行するか、.GetNameSpace 関数で 20 秒のタイムアウトを設定する方法はありますか?

更新: ネットワーク アダプターに問題がある場合 (無効になっている場合など)、コードは名前空間オブジェクトにアクセスできます。コードを承認するプロンプトが表示され、ユーザーがそれを受け入れるまで、交換モードは常に 400 になります。ただし、Exchange サーバーがダウンしている (宛先ホストに到達できない) などの実際の (テスト目的ではない問題) がある場合、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 に答える