teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

他の方からのアドバイスを受けて追記

2020/03/04 03:34

投稿

退会済みユーザー
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

全体的に変更しました。

2020/03/04 03:34

投稿

退会済みユーザー
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
- ```VBAOption Explicit
30
+ やはり、上記の通り、HTTPアクセスができないと難しい・・ということなのかなと思っています。
32
31
 
33
- Sub Main()
32
+ よろしくお願いいたします。
34
33
 
35
- '変数の宣言
36
- Dim http As XMLHTTP60
37
- Dim doc As DOMDocument60
34
+ ![イメージ説明](548350ca1b9995a7c17be8e397805d61.png)
38
- Dim node As IXMLDOMNode
39
- Dim url As String
40
- Dim i As Integer
41
35
 
42
- 'HTTPアクセスを設定して発射
43
- Set http = New XMLHTTP60
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
- 'HTTPアクセスに失敗があったら中止
44
+ 'アクティブワークブックをゲット
45
+ Set wbActive = ThisWorkbook
49
- If http.statusText <> "OK" Then
46
+ wbActive.Worksheets("Sheet1").Activate
47
+ strURL = wbActive.Worksheets("Sheet1").TextBox1.Text
48
+
50
- MsgBox "サーバーへの接続に失敗しました", vbCritical
49
+ httpReq.Open "GET", strURL
50
+ httpReq.send
51
+
52
+ Do While httpReq.readyState < 4
51
- Exit Sub
53
+ DoEvents
52
- End If
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
- doc.LoadXML (http.responseText)
63
+ MsgBox "処理が終了しました"
57
-
58
- 'XPathを使ってノード(要素)を取り込む
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