エラー 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例外を正しくキャッチし、プログラムが正常に動作するはずです。