Visio にて IDTExtensibility2 インターフェース経由で、Application.ConnectionsAdded イベントと Application.SelectionAdded イベントを利用して削除済み図形のイベントを処理した場合、例外処理が発生する

Office 2003 のサポートは終了しました

マイクロソフトでは、2014 年 4 月 8 日に Office 2003 のサポートを終了しました。この変更は、ソフトウェアの更新プログラムおよびセキュリティ オプションに影響しています。 この変更の意味および保護された状態を維持する方法について説明します。

現象
Microsoft Visio 2010、Microsoft Office Visio 2007、または Microsoft Office Visio 2003 にて、IDTExtensibility2 インターフェース経由で Application.ConnectionsAdded イベントと、Application.SelectionAdded イベントを利用して、削除済み図形のイベントを処理した場合、例外処理が発生します。
状況
マイクロソフトでは、この問題について現在調査中です。詳細については、わかりしだいこの資料に掲載する予定です。
詳細

問題の再現手順

  1. 新規の共有アドイン プロジェクトを作成します。
  2. 共有アドイン内で、図形間の接続が確立された後に発生する ConnectionsAdded イベントと SelectionAdded イベントを実装します。
  3. SelectionAdded イベント時に以下のコード例の処理を実装します。
    • 追加したシェイプに、検証用図面のレイヤを設定
    • 追加したシェイプを削除
    • 処理中にエラーが発生した場合、Try~Catch で例外処理を実装します。
    コード例 :
    Dim WithEvents visApp As Visio.ApplicationDim addInInstance As Object <CLSCompliant(False)> _Public Sub OnConnection(ByVal application As Object, _ByVal connectMode As Extensibility.ext_ConnectMode, _ByVal addInInst As Object, ByRef custom As System.Array) _Implements Extensibility.IDTExtensibility2.OnConnection        visApp = CType(application, Microsoft.Office.Interop.Visio.Application)        addInInstance = addInInstEnd SubPrivate Sub visApp_ConnectionsAdded(ByVal Connects As Microsoft.Office.Interop.Visio.Connects) Handles visApp.ConnectionsAdded        Dim visConnect As Visio.Connect        Dim fromSheetType As Integer        Try            For Each visConnect In Connects                fromSheetType = visConnect.FromSheet.Type            Next        Catch ex As Exception            MsgBox("Exception が発生しました。")            Return        End TryEnd SubPrivate Sub visApp_SelectionAdded(ByVal Selection As Microsoft.Office.Interop.Visio.Selection) Handles visApp.SelectionAdded        Dim visLayer As Visio.Layer        Dim Shape As Visio.Shape = Selection(1)        Try            visLayer = visApp.ActivePage.Layers(1)            visLayer.Add(Shape, 0)            Shape.Delete()        Catch ex As Exception            MsgBox("Exceptionが発生しました。")        End TryEnd Sub
  4. ConnectionsAdded イベント時に以下の処理を実装します。
    • Connects オブジェクトの FromSheet に設定されているシェイプの Type を取得
    • シェイプの Type 取得時にエラーが発生した場合、Try~Catch で例外処理を実装します。
  5. Visio ドキュメントを用意し、Page 上に Layers オブジェクトおよび接続ポイントを配置します。
  6. [コネクタ ツール] を選択し、コネクタを、接続ポイントに接続するようドロップすることで、図形間の接続が確立された後に発生する ConnectionsAdded イベントと SelectionAdded イベントを発生させます。
  7. 最初に発生する SelectionAdded イベントでは、例外処理が発生することなく、追加したシェイプを削除できていることを確認します。
  8. 続けて発生する ConnectionsAdded イベント内にて例外処理が発生します。
  9. 再度コネクタを、接続ポイントに接続するようドロップし、SelectionAdded イベントを発生させます。

結果

例外処理が発生します。
プロパティ

文書番号:2500481 - 最終更新日: 10/04/2016 15:11:00 - リビジョン: 5.0

Microsoft Visio Standard 2010, Microsoft Visio Professional 2010, Microsoft Visio Premium 2010, Microsoft Office Visio Standard 2007, Microsoft Office Visio Professional 2007, Microsoft Office Visio Standard 2003, Microsoft Office Visio Professional 2003, Microsoft Visual Studio 2005 Professional Edition, Microsoft Visual Studio 2005 Standard Edition, Microsoft Visual Studio 2005 Team Foundation Server, Microsoft Visual Studio 2005 Team Suite, Microsoft Visual Studio 2008 Academic Edition, Microsoft Visual Studio 2008 Professional Edition, Microsoft Visual Studio 2008 Standard Edition, Microsoft Visual Studio 2010 Premium with MSDN, Microsoft Visual Studio 2010 Professional, Microsoft Visual Studio 2010 Ultimate

  • kbharmony kbexpertiseinter kbtshoot kbbug KB2500481
フィードバック