第 15 章 VISIO での MICROSOFT VBA プログラミング
プログラム実行中にエラーが発生すると、Microsoft Visual Basic for Applications (VBA) はエラー メッセージを生成し、プログラムの実行を停止します。コード実行前に、障害が発生する可能性のあるさまざまな状況を的確に想定してテストすることで、エラーの多くを予防できます。プログラム内で On Error ステートメントを使用すると、エラーをトラップし、エラー処理を行うことができます。On Error の詳細については、VBA のマニュアルを参照してください。
エラーは、さまざまな状況で発生します。ここでは、エラーがよく発生する状況と、その予防方法を示します。
このセクションの内容...
プログラムを実行させる状況を決定すると、その環境をある程度想像できます。たとえば、ダブルクリック動作を処理する VBA プログラムを作成する場合、図面は既に開いていて、ダブルクリック対象の図形はアクティブ ウィンドウで選択されているという状況を想定できます。ただし、ユーザーの操作を、プログラムでコントロールできる範囲は限られています。たとえば、図形のダブルクリックイベントを処理する VBA プログラムが図形のダブルクリックによって実行されるとは限らず、[マクロ] ダイアログ ボックスから選択して実行される可能性もあります。そのようなユーザー操作を防ぐことはできません。
図形が選択されていることを前提条件とするプログラムの場合は、アクティブ ウィンドウの Selection プロパティにオブジェクトが最低 1 つは含まれていることを確認します。
Dim selectObj As Visio.Selection
Set selectObj = ActiveWindow.Selection
If selectObj.Count = 0 Then
MsgBox "図形が選択されていません。" , , "図形の選択"
Else
' Continue processing
End If
オブジェクトにアクセスする前に、コレクションにオブジェクトが含まれているかどうかをチェックすることをお勧めします。Masters コレクションが空の場合に実行するとエラーが発生するような処理があるとします。その場合、次のようなコードをその処理の前に記述して、図面にマスタシェイプがあるかどうかをチェックします。
If ThisDocument.Masters.Count = 0 Then
MsgBox "マスタシェイプがありません。"
'Go to an error handler
End If
戻り値を返すプロパティがメソッドを使用している場合は、実際に戻り値が返されたかどうかを確認することをお勧めします。たとえば、プログラムで図形のテキストに書式を設定する場合は、Shape オブジェクトにテキストがあるかどうかを確認します。
Dim shpObj As Visio.Shape
Dim strText As String
Set shpObj = ActivePage.Shapes.Items(1)
strText = shpObj.Text
If strText = "" Then
MsgBox "選択されている図形にはテキストがありません。" , , "図形のテキストの書式設定"
Else
'Continue processing
End If
VBA には文字列を返す Error 機能があります。Visio® でエラーが発生すると、エラーコードおよびエラー内容を記述した文字列が返されます。Error 関数で、Visio が返したエラーコードに関連付けられた文字列を取得できます。
Visio の Cell オブジェクトの Error プロパティは、セルの数式が計算された際にエラーが発生したかどうかを示します。プログラムでシェイプシート (ShapeSheet®) の数式を変更する場合は、このプロパティを使用して、数式が正しく処理されたかどうかを確認します。返される値の一覧については、Visio 製品付属のオンライン ヘルプ「開発者用リファレンス」 ([ヘルプ] メニューから [開発者用リファレンス] を選択) の「Error プロパティ」を検索してください。