擷取和回應資料存放區中的事件
用戶端可以在節點 (或節點及其所有子項) 上接聽及回應該節點上的變更。 增益集可以回應下列事件。
在 CustomXMLParts 集合上:
- StreamAfterAdd 可讓用戶端在新存放區新增至檔之後回應。
- StreamBeforeDelete 可讓用戶端在從檔中移除存放區之前進行回應。
- StreamAfterLoad 可讓用戶端在使用 XML 載入存放區專案之後回應。
在 CustomXMLPart 物件上:
- NodeAfterInsert 可讓用戶端在新節點新增至存放區之後回應。 如果新增的節點包含子樹,則最上層節點只會引發一次事件。
- NodeAfterDelete 可讓用戶端在刪除節點之後回應。 如果已刪除的節點包含子樹,則最上層節點只會引發一次事件。
- NodeAfterReplace 可讓用戶端在儲存區中取代 XML 節點之後回應。
範例
假設有一個 XML 檔案、C:\test.xml和兩個文字內容控制項。 XML 檔案看起來像這樣:
<?xml version="1.0" standalone="no"?>
<root xmlns="urn:test">
<a>NodeA</a>
<b>NodeB</b>
</root>
您可以使用 XML 對應完成的其中一個強大工作,就是在使用者更新另一個文字內容控制項時,立即更新一個對應的文字內容控制項。 這是使用事件來完成。 若要這樣做,請使用事件建立方法並加以執行。
Dim WithEvents objStream As CustomXMLPart
Sub Demo()
Set objStream = ThisDocument.CustomXMLParts(4)
End Sub
執行此 Demo 副程式會設定 objStream 變數來接聽事件。
請記住,在先前的案例中,檔有兩個文字內容控制項,一個資料對應至 <a>
節點,另一個資料對應至 「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 元件中最後一個子系的文字。 因為資料流程只有兩個節點,所以最後一個節點是 「b」 節點。 更新節點的文字之後,第二個文字內容控制項中會自動顯示更新的文字「您已變更 a!」。
這個範例非常簡單,但它會顯示您可以使用事件、XML 對應和內容控制項執行的動作。 當一個文字內容控制項變更時,請使用這類程式碼來更新檔中的任何文字。 這非常強大,因為它不假設檔案格式設定,而且不適用於檔案格式設定。 相反地,它會針對您附加至檔的架構運作。
另請參閱
支援和意見反應
有關於 Office VBA 或這份文件的問題或意見反應嗎? 如需取得支援服務並提供意見反應的相關指導,請參閱 Office VBA 支援與意見反應。