VB.NETにてOutlook.Applicationを通じてExchangeパブリックフォルダに接続し、アイテムを削除するとOutlookが終了してしまう事象が発生しています。
これを回避する方法がもしおわかりになれば教示頂きたく、ご質問します。よろしくお願い致します。
▼環境
◎クライアント
Windows 7 Enterprise SP1
Microsoft Office Professional Plus 2010 SP2
Visual Studio Express 2012 for Windows Desktop
◎サーバ
Microsoft Exchange 2010
▼事象概要
・Outlook.Applicationを通じて、Exchangeのパブリックフォルダにアクセス。
・予定表アイテムを格納するフォルダよりItemsを取得。
・取得したItemsから一定の条件でFindを行い、抽出されたItemをすべて削除したいが、一つ削除するとOutlookが終了してしまう。
・Outlook終了後は、RPCサービスとの接続が不可となり、エラー(コード:0x800706BA)が発生してしまう。
▼コード
Imports Microsoft.Office.Interop
Imports System.Text
Imports System.IO
Sub Main()
'〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
'変数定義
'〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
Dim objOutlook As Outlook.Application
Dim objNS As Outlook.NameSpace
Dim objFolder As Outlook.MAPIFolder
Dim objItems As Outlook.Items
Dim objItem As Outlook.AppointmentItem
'〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
'アプリケーション(Outlook)の起動
'〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
objOutlook = New Outlook.Application()
objNS = objOutlook.GetNamespace("MAPI")
objNS.Logon("", "", False, True)
'〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
'パブリックフォルダへの接続
'〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
'すべてのパブリックフォルダの取得
objFolder = objNS.GetDefaultFolder(18)
'予定表フォルダの取得
objFolder = objFolder.Folders("予定表")
'〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
'フォルダ内のアイテムを取得
'〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
'アイテムの取得
objItems = objFolder.Items
'アイテムを場所、開始日の昇順にてソート
objItems.Sort("[場所],[開始日]")
'〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
'アイテム毎の判定と削除処理
'〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
'日付を基準にFind
objItem = objItems.Find("[終了日] < '2014/12/31 00:00:00'")
'検索に該当したアイテムのみ処理を行う。
While TypeName(objItem) <> "Nothing"
Console.Write(objItem.Location & "," & objItem.Subject & " Delete." & vbCrLf)
objItem.Delete() '※※※※ ← この処理を実行した時点で、Outlookのインスタンスが終了してしまう。※※※
objItem = Nothing
'次のアイテムへ
objItem = objItems.FindNext
End While
End Sub
以上、よろしくお願い致します。