質問編集履歴
2
他の方からのアドバイスを受けて追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -65,4 +65,78 @@
|
|
65
65
|
End Sub
|
66
66
|
|
67
67
|
|
68
|
-
```
|
68
|
+
```
|
69
|
+
|
70
|
+
### 【追記】
|
71
|
+
他の方からアドバイスをいただきました。
|
72
|
+
それに従って、
|
73
|
+
[https://qiita.com/isamusuzuki/items/b2e88184e7cfb75877a8](https://qiita.com/isamusuzuki/items/b2e88184e7cfb75877a8)
|
74
|
+
こちらのコードの一部分を以下のように変更して動かしてみました。
|
75
|
+
|
76
|
+
```ここに言語を入力
|
77
|
+
Private Sub GetXML()
|
78
|
+
Dim wbActive As Workbook 'アクティブワークブック
|
79
|
+
Dim strURL As String 'URL
|
80
|
+
|
81
|
+
Dim doc As DOMDocument60
|
82
|
+
Dim node As IXMLDOMNode
|
83
|
+
Dim url As String
|
84
|
+
Dim i As Integer
|
85
|
+
'アクティブワークブックをゲット
|
86
|
+
Set wbActive = ThisWorkbook
|
87
|
+
wbActive.Worksheets("Sheet1").Activate
|
88
|
+
strURL = wbActive.Worksheets("Sheet1").TextBox1.Text
|
89
|
+
|
90
|
+
'HTTPアクセスを設定して発射
|
91
|
+
Dim http As XMLHTTP60
|
92
|
+
Set http = New XMLHTTP60
|
93
|
+
|
94
|
+
' http.Open "GET", strURL, False
|
95
|
+
' http.send
|
96
|
+
http.Open "GET", strURL
|
97
|
+
http.send
|
98
|
+
|
99
|
+
'HTTPアクセスに失敗があったら中止
|
100
|
+
' If http.statusText <> "OK" Then
|
101
|
+
' MsgBox "サーバーへの接続に失敗しました", vbCritical
|
102
|
+
' Exit Sub
|
103
|
+
' End If
|
104
|
+
If http.Status <> 200 Then
|
105
|
+
MsgBox "サーバーへの接続に失敗しました", vbCritical
|
106
|
+
Exit Sub
|
107
|
+
End If
|
108
|
+
'XMLデータを取り込む
|
109
|
+
Set doc = New DOMDocument60
|
110
|
+
doc.LoadXML (http.responseText)
|
111
|
+
|
112
|
+
'XPathを使ってノード(要素)を取り込む
|
113
|
+
i = 1
|
114
|
+
For Each node In doc.SelectNodes("//rc")
|
115
|
+
'各ノードのtitle属性を取得して、シートに貼り付ける
|
116
|
+
ActiveSheet.Range("A" & i + 2).Value = i & ": " & node.Attributes.getNamedItem("title").Text
|
117
|
+
i = i + 1
|
118
|
+
Next
|
119
|
+
|
120
|
+
'後片付け
|
121
|
+
Set http = Nothing
|
122
|
+
Set doc = Nothing
|
123
|
+
Set node = Nothing
|
124
|
+
|
125
|
+
End Sub
|
126
|
+
```
|
127
|
+
|
128
|
+
しかし、次はこの部分でFor each内の処理に入らず、後片付けの処理に飛んでしまいます。
|
129
|
+
|
130
|
+
```ここに言語を入力
|
131
|
+
'XPathを使ってノード(要素)を取り込む
|
132
|
+
i = 1
|
133
|
+
For Each node In doc.SelectNodes("//rc")
|
134
|
+
|
135
|
+
```
|
136
|
+
|
137
|
+
これは、結局は「http.Status」の部分が空だからそうなってしまうのでしょうか?
|
138
|
+
どうしたらFor Each内の処理に入ってくれるのか分かりません。
|
139
|
+
|
140
|
+
どなたかご存知の方がいたら教えていただきたいと思っております。
|
141
|
+
|
142
|
+
よろしくお願いいたします。
|
1
全体的に変更しました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
いつもお世話になっております。
|
2
2
|
ExcelVBAでXML取得するプログラムを考えています。
|
3
3
|
サイトはこちらを参考にしました。
|
4
|
-
|
4
|
+
[https://qiita.com/isamusuzuki/items/b2e88184e7cfb75877a8](https://qiita.com/isamusuzuki/items/b2e88184e7cfb75877a8)
|
5
5
|
### 【困っていること】
|
6
6
|
しかし、動かす時に問題がでてきます。
|
7
7
|
それが「HTTPアクセスができない」ということです。
|
8
|
-
主に、
|
8
|
+
主に、上記、参考にしたサイトのコードの中にある下記の部分で「サーバーへの接続に失敗しました」となってしまいます。
|
9
9
|
|
10
10
|
```ここに言語を入力
|
11
11
|
|
@@ -16,58 +16,52 @@
|
|
16
16
|
End If
|
17
17
|
```
|
18
18
|
|
19
|
-
上記、この部分でエラーが出てしまいます。
|
20
19
|
|
21
20
|
### 【聞きたいこと】
|
22
21
|
|
23
|
-
そこで、**HTTPアクセスができるようにするためにはどうしたらいいのかを知りたい**のですが
|
22
|
+
そこで、**上記URLのコードでHTTPアクセスができるようにするためにはどうしたらいいのかを知りたい**のですがどなたかご存知のかたはいらっしゃいますでしょうか?
|
24
|
-
どなたかご存知のかたはいらっしゃいますでしょうか?
|
25
23
|
|
26
24
|
なお、参照設定で「Microsoft XML, v6.0」チェックを入れております。
|
27
25
|
|
26
|
+
また、上記URLのコードでうまくいかなかったため、個人的にXMLを取得するプログラムを作ってみました。
|
28
|
-
|
27
|
+
それが下記コードです。
|
29
|
-
よろしくお願いいたします。
|
30
28
|
|
29
|
+
しかし、この下記コードでもやはりHTMLを除いたnewstitleとLocの情報を取得することができていません。
|
31
|
-
|
30
|
+
やはり、上記の通り、HTTPアクセスができないと難しい・・ということなのかなと思っています。
|
32
31
|
|
33
|
-
|
32
|
+
よろしくお願いいたします。
|
34
33
|
|
35
|
-
'変数の宣言
|
36
|
-
Dim http As XMLHTTP60
|
37
|
-
|
34
|
+

|
38
|
-
Dim node As IXMLDOMNode
|
39
|
-
Dim url As String
|
40
|
-
Dim i As Integer
|
41
35
|
|
42
|
-
'HTTPアクセスを設定して発射
|
43
|
-
|
36
|
+
```VBAOption Explicit
|
44
|
-
url = "https://ja.wikipedia.org/w/api.php?action=query&list=recentchanges&rcnamespace=0&format=xml"
|
45
|
-
http.Open "GET", url, False
|
46
|
-
http.send
|
47
37
|
|
38
|
+
Sub test()
|
39
|
+
Dim wbActive As Workbook 'アクティブワークブック
|
40
|
+
Dim strURL As String 'URL
|
41
|
+
Dim httpReq As XMLHTTP60
|
42
|
+
Set httpReq = New XMLHTTP60
|
43
|
+
|
48
|
-
'
|
44
|
+
'アクティブワークブックをゲット
|
45
|
+
Set wbActive = ThisWorkbook
|
49
|
-
|
46
|
+
wbActive.Worksheets("Sheet1").Activate
|
47
|
+
strURL = wbActive.Worksheets("Sheet1").TextBox1.Text
|
48
|
+
|
50
|
-
|
49
|
+
httpReq.Open "GET", strURL
|
50
|
+
httpReq.send
|
51
|
+
|
52
|
+
Do While httpReq.readyState < 4
|
51
|
-
|
53
|
+
DoEvents
|
52
|
-
|
54
|
+
Loop
|
55
|
+
|
56
|
+
Debug.Print httpReq.responseText
|
57
|
+
'黄色のセルにXMLを表示
|
58
|
+
'ここで本当はHTMLを除いたnewstitleとLocの情報を取得して、EXCELの列に一覧として並べたい
|
59
|
+
wbActive.Worksheets("Sheet1").Range("B10").Value = httpReq.responseText
|
60
|
+
|
61
|
+
Set httpReq = Nothing
|
53
62
|
|
54
|
-
'XMLデータを取り込む
|
55
|
-
Set doc = New DOMDocument60
|
56
|
-
|
63
|
+
MsgBox "処理が終了しました"
|
57
|
-
|
58
|
-
|
64
|
+
|
59
|
-
i = 1
|
60
|
-
For Each node In doc.SelectNodes("//rc")
|
61
|
-
'各ノードのtitle属性を取得して、シートに貼り付ける
|
62
|
-
ActiveSheet.Range("A" & i + 2).Value = i & ": " & node.Attributes.getNamedItem("title").Text
|
63
|
-
i = i + 1
|
64
|
-
Next
|
65
|
-
|
66
|
-
'後片付け
|
67
|
-
Set http = Nothing
|
68
|
-
Set doc = Nothing
|
69
|
-
Set node = Nothing
|
70
|
-
|
71
65
|
End Sub
|
72
66
|
|
73
67
|
|