質問編集履歴

3

追記に番号を付与

2017/07/12 20:45

投稿

Zoohomi
Zoohomi

スコア26

test CHANGED
File without changes
test CHANGED
@@ -48,7 +48,7 @@
48
48
 
49
49
 
50
50
 
51
- <追記>
51
+ <追記
52
52
 
53
53
  http://piyopiyocs.blog115.fc2.com/blog-entry-433.html
54
54
 
@@ -138,7 +138,7 @@
138
138
 
139
139
 
140
140
 
141
- <さらに追記>
141
+ <さらに追記>
142
142
 
143
143
  VBAから、実際に上記のajaxが呼び出されているページにnavigateで遷移してから、以下のコードを実行しました。
144
144
 

2

テスト動作の検証結果

2017/07/12 20:45

投稿

Zoohomi
Zoohomi

スコア26

test CHANGED
File without changes
test CHANGED
@@ -135,3 +135,81 @@
135
135
  コメントにもある通り、error:405が出力されます。
136
136
 
137
137
  この方法では取得不可能なのでしょうか・・?
138
+
139
+
140
+
141
+ <さらに追記>
142
+
143
+ VBAから、実際に上記のajaxが呼び出されているページにnavigateで遷移してから、以下のコードを実行しました。
144
+
145
+ ```vba
146
+
147
+ Dim sb As New StringBuilder '自作のクラスです。他の言語のStringBuilderと同一の機能を持っています
148
+
149
+
150
+
151
+ sb.Add ("javascript:")
152
+
153
+
154
+
155
+ sb.Add (" function KeywordAlert(key) { ")
156
+
157
+ sb.Add (" var param= new Array(); ")
158
+
159
+ sb.Add (" param[param.length] = new param(""key"", key); ")
160
+
161
+ sb.Add (" $.ajax({ ")
162
+
163
+ sb.Add (" url: 'getKeyword', ")
164
+
165
+ sb.Add (" type: ""POST"", ")
166
+
167
+ sb.Add (" data: param, ")
168
+
169
+ sb.Add (" success: function (response) { ")
170
+
171
+ sb.Add (" if (!response.startsWith(""null"") && response.length > 0) { ")
172
+
173
+ ' responseが存在した場合、表示
174
+
175
+ sb.Add (" alert($.parseJSON(response)); ")
176
+
177
+ sb.Add (" } ")
178
+
179
+ sb.Add (" }, ")
180
+
181
+ sb.Add (" error: function (e) { ")
182
+
183
+ sb.Add (" //例外処理 ")
184
+
185
+ sb.Add (" } ")
186
+
187
+ sb.Add (" }); ")
188
+
189
+ sb.Add (" }; ")
190
+
191
+ ' キーワードをアラート
192
+
193
+ sb.Add (" KeywordAlert('abc'); ")
194
+
195
+
196
+
197
+ ' 実行
198
+
199
+ objIE.navigate sb.Text
200
+
201
+
202
+
203
+ ```
204
+
205
+
206
+
207
+ このコードで、目的の文字列がアラートできました!
208
+
209
+ 問題は、このアラートした文字列を、VBAの変数かなにかに突っ込むなどして、VBAで使用したいのですが、方法はありますでしょうか?
210
+
211
+ そもそも、navigateからjavascriptを実行する方法では連携不可能でしょうか?
212
+
213
+
214
+
215
+ ご教授のほど、宜しくお願いいたします。

1

参考サイトを基に記述しましたが、エラーが出力されました。

2017/07/12 00:59

投稿

Zoohomi
Zoohomi

スコア26

test CHANGED
File without changes
test CHANGED
@@ -45,3 +45,93 @@
45
45
  このurl:getKeywordをVBA上から実行し、var data をVBA上コレクションなどに格納し、使用ことは可能でしょうか?
46
46
 
47
47
  ご教授の程お願いいたしますm(_ _)m
48
+
49
+
50
+
51
+ <追記>
52
+
53
+ http://piyopiyocs.blog115.fc2.com/blog-entry-433.html
54
+
55
+ で紹介されている方法を試しましたが、405エラーが出てしまいます。
56
+
57
+
58
+
59
+ ```vba
60
+
61
+ Private Sub CommandButton1_Click()
62
+
63
+ '-----------------
64
+
65
+ 'リクエスト生成
66
+
67
+ '-----------------
68
+
69
+ 'URL(必要に応じて変更)
70
+
71
+ Dim url As String
72
+
73
+ url = "https://example.com/getKeyword"
74
+
75
+
76
+
77
+ 'パラメータ(必要に応じて動的に生成)
78
+
79
+ Dim paramStr As String
80
+
81
+ paramStr = "key=abc"
82
+
83
+
84
+
85
+ '--------------
86
+
87
+ 'POST実行
88
+
89
+ '--------------
90
+
91
+ Dim xmlhttp As Object
92
+
93
+ Set xmlhttp = CreateObject("msxml2.xmlhttp")
94
+
95
+ xmlhttp.Open "POST", url, True
96
+
97
+ xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
98
+
99
+ xmlhttp.send (paramStr) 'パラメータをぽいっちょと
100
+
101
+
102
+
103
+ '--------------
104
+
105
+ '応答取得
106
+
107
+ '--------------
108
+
109
+ Dim retCd As String
110
+
111
+ retCd = xmlhttp.Status 'ここでretCdに405が代入されます。
112
+
113
+
114
+
115
+ If retCd <> 200 Then
116
+
117
+ Debug.Print "error:" & retCd ' error:405 が出力されます
118
+
119
+ Else
120
+
121
+ Dim retHtml As String
122
+
123
+ retHtml = StrConv(xmlhttp.responseBody, vbUnicode, 1041) '結果HTML取得
124
+
125
+ Debug.Print retHtml
126
+
127
+ End If
128
+
129
+ End Sub
130
+
131
+ ```
132
+
133
+
134
+
135
+ コメントにもある通り、error:405が出力されます。
136
+
137
+ この方法では取得不可能なのでしょうか・・?