Closed the question as it wasn't an error - it just isn't possible
I am trying to return a range that contains all elements in a listobject/xmlmap where a sibling element meets some criteria (a particular elements values are not empty/blank/zero-length).
If I try to return the entire element of the xmlmap, I get the range returned correctly. However as soon as I add any criteria, the range object isn't set and I get an error.
エラーを特定するために名前空間の参照を全体的に削除しましたが、名前空間の宣言がなくてもエラーは残ります。以下のコードは、エラーを表示するために、私が作業しているものを大幅に簡略化したものです。
XML データ
<?xml version='1.0' encoding='UTF-8'?>
<ROOT>
<RECORD>
<ITEMA/>
<ITEMB>RED</ITEMB>
</RECORD>
<RECORD>
<ITEMA>A</ITEMA>
<ITEMB>BLUE</ITEMB>
</RECORD>
<RECORD>
<ITEMA>B</ITEMA>
<ITEMB>GREEN</ITEMB>
</RECORD>
</ROOT>
XSD を使用して Excel で XmlMap をセットアップする
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="ROOT" type="RootType"/>
<xs:complexType name="RootType">
<xs:sequence>
<xs:element name="RECORD" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="ITEMA"/>
<xs:element name="ITEMB"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:schema>
作業用 VBA コード (述語なし)
Sub TestSUCCESS()
Dim rngSource As Range
Dim sSourceXPath As String
sSourceXPath = "/ROOT/RECORD/ITEMB"
Set rngSource = Sheet4.XmlDataQuery(sSourceXPath)
Debug.Print rngSource.Address
End Sub
動作しない VBA コード (述語付き)
Sub TestERROR()
Dim rngSource As Range
Dim sSourceXPath As String
sSourceXPath = "/ROOT/RECORD/ITEMA[text()[normalize-space()]]"
Set rngSource = Sheet4.XmlDataQuery(sSourceXPath)
If Not rngSource Is Nothing Then
Debug.Print rngSource.Address
Else
Debug.Print "ERROR: rngSource isn't set"
End If
End Sub
次のxpathも使用してみました:
"/ROOT/RECORD/ITEMB[../ITEMA[string-length(text()) > 0]]"
何かを機能させるためだけに次のバリエーションがありますが、役に立ちません:
sSourceXPath = "/ROOT/RECORD/ITEMB[../ITEMA[.="A"]]"
私が提供した xPath の例はすべて、Altova XMLSpy 2005 で動作します。
私が間違っている場所について誰か提案を提供できますか?