私はいくつかのVBAコードを作成しています。これらのドキュメントは、定期的に作成されており、常に異なっています。それがうまくいくならば、コンテンツコントロールとカスタムXMLから適切な価値を得ることができます。次のように私は(データのない完全なセット)XMLを定義したWord 2013:既存のカスタムXMLにマップされたVBA挿入コンテンツコントロール
:
<document xmlns="http://example.com/dept/doctype">
<office>
<address>123 Sample St</address>
<city>Sampleville</city>
</office>
<customer>
<address>456 Other St</address>
<city>Otherville</city>
</customer>
<docinfo>
<refid>XaCaXaCaX</refid>
<docid>1</docid>
</docinfo>
</document>
私は、カスタムXML(開発者用リボン> XMLマッピングペイン>カスタムXMLパート>は新しいパーツを追加インポートしました。 ..)、データはWordに存在します。そのペインでコンテンツコントロールを挿入すると、完全に機能します。
ただし、これは期待どおりに機能しません。コンテンツコントロールが追加されても、カスタムXML部分のノードにバインドされていないため、そのノードにバインドされている他のインスタンスが変更されたときに更新されません。
Sub Test()
Const sNamespace = "http://example.com/dept/doctype"
Const sXMLOfficeAddressPath = "/document/office/address"
Dim oParts As CustomXMLParts
Dim oPart As CustomXMLPart
Dim oCC As ContentControl
Dim oRange As Range
On Error GoTo Err_Handler
Set oParts = ActiveDocument.CustomXMLParts.SelectByNamespace(sNamespace)
Set oPart = ActiveDocument.CustomXMLParts.SelectByID(oParts.Item(1).ID)
ActiveDocument.Range.InsertParagraphBefore
Set oRange = ActiveDocument.Paragraphs(1).Range
Set oCC = ActiveDocument.ContentControls.Add(wdContentControlText, oRange)
oCC.XMLMapping.SetMapping sXMLOfficeAddressPath, , oPart
oCC.Title = "Office Address"
oCC.Color = wdColorBlack
Exit Sub
Err_Handler:
MsgBox (Err.Number & ": " & Err.Description)
End Sub
SetMappingは決してエラーをスローしません。サイレントに失敗します。
実行時にXMLを追加すると仮定した場合のすべての例 - XMLを複数追加すると、追加されたフィールドごとに1つずつ(おそらく50以上では、迷惑な肥満の)。
どこからインスピレーションを受ける必要がありますか?
ああ、はい、それはあなたが睡眠の時間のカップルにものをサニタイズする必要があるときに何が起こるかです。 OPを適切に更新します。 – DavidRa