エラー BC30392 は、Catchブロックでキャッチできない例外をキャッチしようとした場合に発生します。このエラーの原因として、特定の種類の例外オブジェクトを正しくキャッチしていない可能性があります。Outlookのオブジェクトモデルを扱う場合は、COM例外(System.Runtime.InteropServices.COMException)が発生することが一般的です。

以下は、例外のキャッチをより正確に行うために修正したコードです。Catch ex As Exception ではなく、Catch ex As System.Runtime.InteropServices.COMException を使用してCOM例外をキャッチするようにします。

修正版コード

Imports Microsoft.Office.Interop.Outlook
Imports System.Timers

Module ExtractOutlookTasks

    Private refreshTimer As System.Timers.Timer

    Sub Main()
        ' タイマーの設定(10秒ごとに更新)
        refreshTimer = New System.Timers.Timer(10000) ' ミリ秒単位 (10000ミリ秒 = 10秒)
        AddHandler refreshTimer.Elapsed, AddressOf OnTimedEvent
        refreshTimer.AutoReset = True
        refreshTimer.Enabled = True

        ' 最初のタスク取得
        UpdateTasks()

        ' 終了待機(Enterキーが押されるまで)
        Console.WriteLine("タスクの更新を開始しました。終了するにはEnterキーを押してください。")
        Console.ReadLine()
    End Sub

    ' タイマーイベントでタスクを更新
    Private Sub OnTimedEvent(source As Object, e As ElapsedEventArgs)
        UpdateTasks()
    End Sub

    ' タスクをOutlookから取得して表示する
    Private Sub UpdateTasks()
        Try
            Dim outlookApp As New Application()
            Dim tasksFolder As MAPIFolder = outlookApp.Session.GetDefaultFolder(OlDefaultFolders.olFolderTasks)

            Console.Clear()
            Console.WriteLine("現在のOutlookタスク一覧:")
            Console.WriteLine("-------------------------------")

            For Each task As TaskItem In tasksFolder.Items
                Console.WriteLine("Subject: " & task.Subject)
                Console.WriteLine("Due Date: " & task.DueDate.ToString())
                Console.WriteLine("Status: " & task.Status.ToString())
                Console.WriteLine("-------------------------------")
            Next
        Catch ex As System.Runtime.InteropServices.COMException
            Console.WriteLine("Outlookの操作中にエラーが発生しました: " & ex.Message)
        Catch ex As Exception
            Console.WriteLine("予期しないエラーが発生しました: " & ex.Message)
        End Try
    End Sub
End Module

修正内容

1. COMExceptionのキャッチ: Catch ex As System.Runtime.InteropServices.COMException を追加し、Outlookの操作に関連するCOM例外をキャッチするようにしました。


2. 汎用例外のキャッチ: 一般的な例外は、Catch ex As Exception でキャッチされます。



コンパイルと実行方法

1. この修正版コードを ExtractOutlookTasks.vb として保存します。


2. コマンドプロンプトで次のコマンドを実行してコンパイルします。

vbc.exe /r:Microsoft.Office.Interop.Outlook.dll /out:ExtractOutlookTasks.exe ExtractOutlookTasks.vb


3. コンパイルが成功したら、ExtractOutlookTasks.exe を実行してタスクを定期的に更新してください。



これで、Outlookの操作中に発生するCOM例外を正しくキャッチし、プログラムが正常に動作するはずです。