none
VB.NETにてOutlook.Applicationを通じてExchangeパブリックフォルダに接続し、アイテムを削除するとOutlookが終了する。 RRS feed

  • 質問

  • 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

    以上、よろしくお願い致します。


    • 編集済み TB_303 2014年7月31日 8:14
    2014年7月31日 8:13