
すみません、いつも、いろいろな方に助けて頂いていますが、また、初歩的な質問をさせて頂きます。
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
VBA でxmlの全要素・属性の読み込み
Visual Basic(VBA)
-
VBAでXMLを出力するプログラムを作成する際の名前空間接頭辞の付与の仕方について
Visual Basic(VBA)
-
郵便番号検索APIにてget ElementByTagNameでうまくを取得できない
Visual Basic(VBA)
-
-
4
XPathで途中に名前空間が設定されていると狙った要素を指定できない
XML
-
5
XMLでのAttributeを持ったNodeの追加方法
Visual Basic(VBA)
-
6
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
7
XMLをエクセルに取り込むマクロ
Visual Basic(VBA)
-
8
あるノードリストに、特定の名前のノードが存在するかどうか調べたい
XML
-
9
vbaでxmlからNodeListでデータがない時、空欄で取得する方法
Visual Basic(VBA)
-
10
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
11
VB2005でXMLデータから複数ある要素の入れ子を取得する方法
Visual Basic(VBA)
-
12
XMLファイルのattribute値がうまく取得できません。。
Microsoft ASP
-
13
xmlファイル内の文字列置換
Visual Basic(VBA)
-
14
実行時エラー 438になった時の対処法を教えて下さい。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBA セルの値がおかしいです
-
VBA セル間のリンク修正につい...
-
WindowsのOutlook を VBA から...
-
【ExcelVBA】値を変更しながら...
-
ExcelのVBAコードについて教え...
-
VBAでCOPYを繰り返すと、処理が...
-
マクロの記録を使用したマクロ...
-
vba textboxへの入力について教...
-
複数のExcelファイルをマージす...
-
Vba Array関数について教えてく...
-
【マクロ】シートの変数へ入れ...
-
【マクロ】並び替えの範囲が、...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
【マクロ】開いているブックの...
-
Excelのマクロについて教えてく...
-
Vba WorkBooks.Openについて教...
-
VBAから書き込んだ条件付き初期...
-
Vba 型が一致しません(エラー1...
-
【ExcelVBA】5万行以上のデー...
-
[Excel VBA]特定の条件で文字を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBSでxmlの値を書き換えたい
-
Excel-VBAでXMLの複数ノードの...
-
RSSファイルの拡張子はどれが正...
-
XMLのタグ名に予約語は禁止?
-
XML同じ名前の要素を自動で集約...
-
DOMで\\\\localhost\\~がload...
-
TOMCAT起動エラー
-
XMLファイルをPHPで読み込むには?
-
php xml 読み込んで 一部のみ...
-
CPUの考え方を教えてください ...
-
ルート要素ノードが2個ある場合?
-
SNMP リンクダウンとノードダ...
-
東芝のDynabookなのですがアン...
-
XMLで要素が記述された順番に意...
-
XML、XSLTの適応エラー(IEから...
-
C#でTreeViewのCheckBoxのサイ...
-
xmlファイルが上手にHTMLに変換...
-
昔Winnyってありましたけど、あ...
-
バッチファイルでテキストファ...
-
ノードとは
おすすめ情報