次の方法で共有


IVisEventProc.VisEventProc メソッド (Visio)

EventList.AddAdvise メソッドによって渡されたイベント通知を処理する IVisEventProc のプライベート メンバー関数。

構文

VisEventProc (nEventCodepSourceObjnEventIDnEventSeqNumpSubjectObjvMoreInfo)

IVisEventProc オブジェクトを表す変数。

パラメーター

名前 必須 / オプション データ型 説明
nEventCode 必須 Integer 発生した 1 つまたは複数のイベントです。
pSourceObj 必須 Object 通知の発生元となる Event オブジェクトが格納された EventList コレクションを持つオブジェクトです。
nEventID 必須 Long EventList コレクション に含まれる Event オブジェクトの一意識別子です。
nEventSeqNum 必須 Long アプリケーションの呼び出しインスタンスで発生したイベントのシーケンスに関連したイベントの序数位置です。
pSubjectObj 必須 Object イベントの対象 (イベントの発生先のオブジェクト) です。 例については「備考」を参照してください。
vMoreInfo 必須 バリアント型 イベントの対象に関する詳細情報です。 詳細については「備考」を参照してください。

戻り値

バリアント型

注釈

イベント通知を処理するには、IVisEventProc インターフェイスを実装するクラス モジュールを作成し、このクラスのインスタンスを作成して、EventList コレクションの AddAdvise メソッドに引数として渡します。 通知を送信する Event オブジェクトを作成するには、AddAdvise メソッドを使用します。

nEventCode パラメーターは、発生した特定のイベントを識別します。 AddAdvise メソッドの EventCode 引数は、nEventCode として VisEventProc に渡されます。 プロシージャ内では、分岐を使用して、発生したイベントを特定し処理できます。 このトピックで取り上げる例では、Select Case 制御構造を使用しています。

EventList コレクションの Index プロパティとは異なり、nEventID は、Event オブジェクトをコレクションに追加したり、コレクションから削除しても、変更されません。

VisEventProc 内から、次のコードを使用して、通知を送信した Event オブジェクトを取得できます。

pSourceObj. EventList.ItemFromID(nEventID )

ソース オブジェクト (pSourceObj) と Event オブジェクト間の接続は、次のいずれかの状況が発生するまで維持されます。

  • プログラムが Event オブジェクトを削除する。

  • プログラムは、ソース オブジェクトへの最後の参照を解放します。 ( EventList コレクションと Event オブジェクトは、ソース オブジェクトへの参照を保持します)。

  • Microsoft Visio アプリケーション インスタンスが終了します。

Visio インスタンスで発生する最初のイベントには 、nEventSeqNum = 1、2 番目のイベント = 2 などがあります。 場合によっては、シーケンス番号を EventInfo プロパティと組み合わせて使用して、イベントに関する詳細情報を取得できます。

ShapeAdded イベントの pSubjectObj パラメーターは、追加した図形を表す Shape オブジェクトですが、BeforeSelectionDelete イベントの件名は、削除される図形が選択される Selection オブジェクトです。

多くのイベントでは、vMoreInfo は、アプリケーションが実行対象のアドオンに渡すコマンド ラインに類似した文字列になります。 通知が詳細情報を含まない場合、このパラメーターは Nothing に設定されます。 特定のイベントの通知パラメーターの詳細については、このリファレンスの特定のイベント トピックを参照してください。

Visio 2000 以降、 VisEventProc は値を返す関数として定義されています。 ただし、Visio では、クエリ イベント コードが渡された VisEventProc への呼び出しからの戻り値のみを確認します。 IDispatch を介して VisEventProc を提供するシンク オブジェクトには変更は必要ありません。 クエリ イベントを処理できるように既存のイベント ハンドラーを変更するには、 Sub プロシージャを Function プロシージャに変更し、適切な値を返します。 (クエリ イベントの詳細については、 Query でプレフィックスが付いたイベント トピックについては、このリファレンスを参照してください)。

nEventCode でクエリ イベント (Query のプレフィックスが付いたイベント) が識別された場合は、VisEventProc から True を返してイベントを取り消し、False を返してイベントを発生させます。 明示的な値を返さない場合、Microsoft Visual Basic for Applications (VBA) は空の Variant を返します。 明示的な値を返さない場合、Microsoft Visual Basic for Applications (VBA) は空のバリアント型 (Variant) を返し、Visio は False と解釈します

この例には、Visio 内のソース オブジェクト (たとえば Document) が開始したイベントを処理するための IVisEventProc を実装するクラス モジュールの作成方法を示します。 このモジュールは、関数 VisEventProc で構成され、DocumentSavedPageAdded、さらに ShapesDeleted の 3 つのイベントをチェックする Select Case ブロックを使用します。 他のイベントは、既定のケース (Case Else) に分類されます。 各 Case ブロックは、発生するイベントの名前とイベント コードを含む文字列 (strMessage) を構築します。 最後に、関数が現在のウィンドウにその文字列を表示します。

このサンプル コードを VBA または Visual Basic の新しいクラス モジュールにコピーし、モジュール clsEventSink という名前を付けます。 その後、イベント シンク モジュールを使用して、クラス インスタンスにイベント発生の通知を送信する clsEventSink クラスと Event オブジェクトのインスタンスを作成できます。 イベントシンク モジュールの作成方法については、AddAdvise メソッドの例を参照してください。

 
Implements Visio.IVisEventProc 
 
 
'Declare visEvtAdd as a 2-byte value 
'to avoid a run-time overflow error 
Private Const visEvtAdd% = &H8000 
 
Private Function IVisEventProc_VisEventProc( _ 
 ByVal nEventCode As Integer, _ 
 ByVal pSourceObj As Object, _ 
 ByVal nEventID As Long, _ 
 ByVal nEventSeqNum As Long, _ 
 ByVal pSubjectObj As Object, _ 
 ByVal vMoreInfo As Variant) As Variant 
 
 Dim strMessage As String 
 
 
 'Find out which event fired 
 Select Case nEventCode 
 Case visEvtCodeDocSave 
 strMessage = "DocumentSaved (" & nEventCode & ")" 
 Case (visEvtPage + visEvtAdd) 
 strMessage = "PageAdded (" & nEventCode & ")" 
 Case visEvtCodeShapeDelete 
 strMessage = "ShapesDeleted(" & nEventCode & ")" 
 Case Else 
 strMessage = "Other (" & nEventCode & ")" 
 End Select 
 
 
 'Display the event name and the event code 
 Debug.Print strMessage 
 
End Function

サポートとフィードバック

Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。