我正在尝试使用VBA从customXMLpart中读取一些customXMLnode,以在Microsoft word中填充一些内容控件。对于下面的代码示例,我只是在尝试调试此问题时打印即时窗口。
当我读取没有名称空间的customXMLpart内的customXMLnode时,我可以做到这一点而没有问题。但是,当尝试读取具有名称空间的customXMLpart中的节点时,在尝试输出到即时窗口的行上,我得到运行时错误91(未设置对象变量)(请参见下面的代码示例中的注释) )。我在此之前设置了一个断点以尝试解决此问题,它表明节点(在我的下面的代码中为cxn)设置为Nothing。我不确定自己在做什么错。
XML是:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<People xmlns="people">
<Person>
<Name> bob </Name>
<Street> Main St. </Street>
</Person>
</People>`
VBA是:
Dim cxp1 As CustomXMLParts
Dim cxn As CustomXMLNode
' Returns all of the custom xml parts with the given namespace.
Set cxp1 = ActiveDocument.CustomXMLParts.SelectByNamespace("people")
' Get the node matching the XPath expression.
Set cxn = cxp1(1).SelectSingleNode("/People/Person/Name")
'executing the line below gives me run-time error 91 (object variable not
'set). And cxn shows that it is set to Nothing.
Debug.Print cxn.Text
我基本上是从Microsoft网站https://docs.microsoft.com/en-us/office/vba/api/office.customxmlparts.selectbynamespace获得此代码的,并对我的特定XML进行了一些细微更改。
我认为我有正确的Dim和Set语句,因此不清楚为什么会出现此错误。我知道XML很好,因为使用VBA时,如果没有命名空间,我可以读取XML,如下所示:
Dim parts As CustomXMLParts
Dim part As CustomXMLPart
Dim nodes As CustomXMLNodes
Dim node As CustomXMLNode
Set parts = ActiveDocument.CustomXMLParts
For Each part In parts
If Len(part.NamespaceURI) = 0 Then
Set node = part.SelectSingleNode("/People/Person/Name")
debug.Print = node.Text
任何建议都非常感谢!