
すみません、いつも、いろいろな方に助けて頂いていますが、また、初歩的な質問をさせて頂きます。
Excel2007のVBAでXMLの扱いが良くわかっておりません。
以下のプログラムで複数ItemのASINを出力したいのですが、うまくいきません。
XMLがきちんと取得できているのはWireSharkでキャプチャして確認できております。
VBAで表示出力するのがうまくいきません。ご教授方よろしくお願いします。
selectSingleNodeで一つの場合はうまく取り出せています。複数ノードの場合にSelectNodesの使い方に問題がありますでしょうか?
型の宣言などに誤りがありますでしょうか?
また、基本的なことですが、MSXML2を使おうとしたら、Excel2007で使えませんでした。
XMLDOMは、サポート切れ?で古いので、MSXML2を使うのが良いとWebで見ました。
DLLなどが必要な気がしているのですが、よくわかっていないのでご教授頂きたいです。
すみませんが、よろしくお願いします。
*****VBAプログラム(抜粋)******
Dim xml As Object, xmlItems As Object, objPrice As Object
'XML オブジェクト作成
Set xml = CreateObject("Microsoft.XMLDOM")
xml.async = False
xml.Load URI
Set xmlItems = xml.SelectNodes("ItemLookupResponse/Items/Item")
For Each objPrice In xmlItems
' ASIN
If Not objPrice.SelectSingleNode("ASIN") Is Nothing Then
curWS.Cells(rowIndex, ASINCol) = objPrice.SelectSingleNode("ASIN").text
End If
Next
*****取得したXML(抜粋)******
<ItemSearchResponse >
<Items>
<Item>
<ASIN>111</ASIN>
</Item>
<Item>
<ASIN>222</ASIN>
</Item>
<Item>
<ASIN>333</ASIN>
</Item>
</Items>
</ItemSearchResponse>
No.1ベストアンサー
- 回答日時:
とりあえず下記で111,222,333が取得できました。
ご参考まで。当方、Windows7Home64bit/xl2010です。
環境は異なりますが、MSXML3あたりでも動くコードだと思います。
コード中XPATHはItemLookupResponseなのに、テストデータの方はItemSearchResponseになっていますが大丈夫ですか?
'MSXML6に参照設定
Sub test()
Dim XML As New MSXML2.DOMDocument60
Dim xmlItems As IXMLDOMNodeList
Dim objPrice As IXMLDOMNode
XML.async = False
' XML.validateOnParse = False
' XML.resolveExternals = False
' XML.preserveWhiteSpace = True
XML.Load GetDesktopPath & "\test.xml" 'お示しのデータをコピペして保存
Set xmlItems = XML.SelectNodes("ItemSearchResponse/Items/Item")
For Each objPrice In xmlItems
' ASIN
If Not objPrice.SelectSingleNode("ASIN") Is Nothing Then
Debug.Print objPrice.SelectSingleNode("ASIN").Text
End If
Next
'直接ASINまで指定しても良いと思うが...
' Set xmlItems = XML.SelectNodes("ItemSearchResponse/Items/Item/ASIN")
' If xmlItems.Length > 0 Then
' For Each objPrice In xmlItems
' Debug.Print objPrice.Text
' Next
' End If
Set XML = Nothing
End Sub
Private Function GetDesktopPath() As String
Dim wScriptHost As Object, strInitDir As String
Set wScriptHost = CreateObject("Wscript.Shell")
GetDesktopPath = wScriptHost.SpecialFolders("Desktop")
Set wScriptHost = Nothing
End Function
プログラムまで記載頂きありがとうございました。SelectNodesの考え方はあっているようですね。
参考になりました。根本的に何かができていないようですので、頂いたプログラムで勉強します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) vbaのエラー対応(実行時エラー7:メモリが不足しています) 4 2023/04/24 00:20
- その他(Microsoft Office) VBA メール送信済で実行されるはずが、実行されない時があります。 2 2023/02/02 14:05
- Visual Basic(VBA) vbaの構文の修正相談(xmlファイルを順に開いてコピペ作業) 1 2023/04/22 01:18
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
- XML XML同じ名前の要素を自動で集約するツール 1 2022/04/11 09:21
- Visual Basic(VBA) エクセルVBA(実行時エラー438)の対処法を教えてもらえないでしょうか 3 2023/04/22 13:43
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Amazon アメリカAmazon(Amazon.com)で商品の検索をしてもASINコードが表示されません。 ア 1 2023/03/28 18:32
このQ&Aを見た人はこんなQ&Aも見ています
-
VBA でxmlの全要素・属性の読み込み
Visual Basic(VBA)
-
VBAでXMLを出力するプログラムを作成する際の名前空間接頭辞の付与の仕方について
Visual Basic(VBA)
-
VB2005でXMLデータから複数ある要素の入れ子を取得する方法
Visual Basic(VBA)
-
-
4
XPathで途中に名前空間が設定されていると狙った要素を指定できない
XML
-
5
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
6
vbaでxmlからNodeListでデータがない時、空欄で取得する方法
Visual Basic(VBA)
-
7
郵便番号検索APIにてget ElementByTagNameでうまくを取得できない
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
xmlから\\t文字を取得する
-
Excel-VBAでXMLの複数ノードの...
-
XMLからデータを取得
-
VBA 『Range』 『Cells』 の関係
-
昔Winnyってありましたけど、あ...
-
ブレークポイントで止らない
-
CPUの考え方を教えてください ...
-
2stepをくりかえす方法を教えて...
-
mke2fs -i について
-
東芝のDynabookなのですがアン...
-
文法上の問題はありますか?
-
エクセルVBA ウェブ上のボタ...
-
VB6.0ツリービューについて
-
XMLで特殊文字を扱うにはどうし...
-
ツリービューで、画像管理した...
-
index.rdf' の実行エラー
-
このエラー、何とかなりません...
-
プログラミングC言語について次...
-
4バイトを10進数に変換する方法
-
IE7とDOCTYPE宣言について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel-VBAでXMLの複数ノードの...
-
VBSでxmlの値を書き換えたい
-
FOPでPDF作成時の日本語表示の...
-
sitemap.xmlとrobots.txtの関係
-
TOMCAT起動エラー
-
C#のDataGridViewにCheckBox
-
XML同じ名前の要素を自動で集約...
-
XMLのタグ名に予約語は禁止?
-
エラーメッセジの意味が分かり...
-
XMLファイルをPHPで読み込むには?
-
DTDについて
-
RSSファイルの拡張子はどれが正...
-
妥当なXML文書
-
YAHOOオークションAPI ...
-
tumblrのxmlをsimplexml_load_f...
-
サイトマップの作り方。
-
encoding="unicode"について
-
expatで&があるとうまく解析で...
-
php xml 読み込んで 一部のみ...
-
DOMで\\\\localhost\\~がload...
おすすめ情報