データ ストアのイベントを取得して応答する
クライアントは、ノード上、またはノードおよびそのすべての子ノード上の変更をリッスンして応答することができます。 アドインは次のイベントに応答できます。
CustomXMLParts コレクション上のイベント
- StreamAfterAdd を使用すると、新しいストアがドキュメントに追加された後にクライアントが応答できるようになります。
- StreamBeforeDelete を使用すると、ドキュメントからストアが削除される前にクライアントが応答できます。
- StreamAfterLoad を使用すると、ストアアイテムが XML で読み込まれた後にクライアントが応答できるようになります。
CustomXMLPart オブジェクト上のイベント
- NodeAfterInsert を使用すると、新しいノードがストアに追加された後にクライアントが応答できるようになります。 追加されたノードにサブツリーが含まれている場合、イベントは最上位ノードに対して 1 回だけ発生します。
- NodeAfterDelete を使用すると、ノードが削除された後にクライアントが応答できるようになります。 削除されたノードにサブツリーが含まれている場合、イベントは最上位ノードに対して 1 回だけ発生します。
- NodeAfterReplace を使用すると、ストアで XML ノードが置き換えられた後にクライアントが応答できるようになります。
サンプル
XML ファイル C:\test.xml および 2 つのテキスト コンテンツ コントロールがあるとします。 XML ファイルは次のようになっています。
<?xml version="1.0" standalone="no"?>
<root xmlns="urn:test">
<a>NodeA</a>
<b>NodeB</b>
</root>
XML マッピングで実現できる強力な機能の 1 つに、ユーザーが一方のテキスト コンテンツ コントロールを更新すると、もう一方のマップされたテキスト コンテンツ コントロールを直ちに更新できる機能があります。 この機能は、イベントを使って実現できます。 この機能を実行するには、イベントを記述したメソッドを作成し、実行します。
Dim WithEvents objStream As CustomXMLPart
Sub Demo()
Set objStream = ThisDocument.CustomXMLParts(4)
End Sub
Demo サブルーチンを実行すると、イベントをリッスンする objStream 変数が設定されます。
前のシナリオでは、ドキュメントに 2 つのテキスト コンテンツ コントロールがあり、1 つのデータがノードに <a>
マップされ、もう 1 つのデータが "b" ノードにマップされていることに注意してください。 ノード内 <a>
のテキストが変更されると、"b" ノードが自動的に何かを実行するようにイベントを設定するとします。 次の objStream_NodeAfterReplace イベント サブルーチンを使用すると、これを実現できます。
Private Sub objStream_NodeAfterReplace( _
ByVal OldNode As Office.CustomXMLNode, _
ByVal NewNode As Office.CustomXMLNode, _
ByVal InUndoRedo As Boolean)
' Check if NewNode, which is the node after the change, is
' the "a" node by checking the BaseName of its ParentNode
If NewNode.ParentNode.BaseName = "a" Then
objStream.DocumentElement.LastChild.Text = "You changed a!"
End If
End Sub
このルーチンは、ユーザーが要素 <a>
にマップされた最初のテキスト コンテンツ コントロールのテキストを変更した後にトリガーされます。 ノード内のテキストが <a>
変更されると、カスタム XML 部分の最後の子のテキストが更新されます。 ストリームには 2 つのノードしかないため、最後のノードは "b" ノードです。 ノードのテキストが更新されると、2 番目のテキスト コンテンツ コントロールに "変更しました! " の更新されたテキストが自動的に表示されます。
この例は非常に簡単ですが、イベント、XML マッピング、およびコンテンツ コントロールを使って実行できる処理がわかります。 1 つのテキスト コンテンツ コントロールが変更されたときにドキュメント内の任意のテキストを更新するには、このようなコードを使用します。 この機能の強力なところは、文書の書式について何も前提がなく、文書の書式を操作しないことです。 さらに、文書に関連付けるスキーマに関係なく動作します。
関連項目
サポートとフィードバック
Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。