共用方式為


擷取和回應資料存放區中的事件

用戶端可以在節點 (或節點及其所有子項) 上接聽及回應該節點上的變更。 增益集可以回應下列事件。

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 支援與意見反應