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

質問編集履歴

3

追記に番号を付与

2017/07/12 20:45

投稿

Zoohomi
Zoohomi

スコア26

title CHANGED
File without changes
body CHANGED
@@ -23,7 +23,7 @@
23
23
  このurl:getKeywordをVBA上から実行し、var data をVBA上コレクションなどに格納し、使用ことは可能でしょうか?
24
24
  ご教授の程お願いいたしますm(_ _)m
25
25
 
26
- <追記>
26
+ <追記
27
27
  http://piyopiyocs.blog115.fc2.com/blog-entry-433.html
28
28
  で紹介されている方法を試しましたが、405エラーが出てしまいます。
29
29
 
@@ -68,7 +68,7 @@
68
68
  コメントにもある通り、error:405が出力されます。
69
69
  この方法では取得不可能なのでしょうか・・?
70
70
 
71
- <さらに追記>
71
+ <さらに追記>
72
72
  VBAから、実際に上記のajaxが呼び出されているページにnavigateで遷移してから、以下のコードを実行しました。
73
73
  ```vba
74
74
  Dim sb As New StringBuilder '自作のクラスです。他の言語のStringBuilderと同一の機能を持っています

2

テスト動作の検証結果

2017/07/12 20:45

投稿

Zoohomi
Zoohomi

スコア26

title CHANGED
File without changes
body CHANGED
@@ -66,4 +66,43 @@
66
66
  ```
67
67
 
68
68
  コメントにもある通り、error:405が出力されます。
69
- この方法では取得不可能なのでしょうか・・?
69
+ この方法では取得不可能なのでしょうか・・?
70
+
71
+ <さらに追記>
72
+ VBAから、実際に上記のajaxが呼び出されているページにnavigateで遷移してから、以下のコードを実行しました。
73
+ ```vba
74
+ Dim sb As New StringBuilder '自作のクラスです。他の言語のStringBuilderと同一の機能を持っています
75
+
76
+ sb.Add ("javascript:")
77
+
78
+ sb.Add (" function KeywordAlert(key) { ")
79
+ sb.Add (" var param= new Array(); ")
80
+ sb.Add (" param[param.length] = new param(""key"", key); ")
81
+ sb.Add (" $.ajax({ ")
82
+ sb.Add (" url: 'getKeyword', ")
83
+ sb.Add (" type: ""POST"", ")
84
+ sb.Add (" data: param, ")
85
+ sb.Add (" success: function (response) { ")
86
+ sb.Add (" if (!response.startsWith(""null"") && response.length > 0) { ")
87
+ ' responseが存在した場合、表示
88
+ sb.Add (" alert($.parseJSON(response)); ")
89
+ sb.Add (" } ")
90
+ sb.Add (" }, ")
91
+ sb.Add (" error: function (e) { ")
92
+ sb.Add (" //例外処理 ")
93
+ sb.Add (" } ")
94
+ sb.Add (" }); ")
95
+ sb.Add (" }; ")
96
+ ' キーワードをアラート
97
+ sb.Add (" KeywordAlert('abc'); ")
98
+
99
+ ' 実行
100
+ objIE.navigate sb.Text
101
+
102
+ ```
103
+
104
+ このコードで、目的の文字列がアラートできました!
105
+ 問題は、このアラートした文字列を、VBAの変数かなにかに突っ込むなどして、VBAで使用したいのですが、方法はありますでしょうか?
106
+ そもそも、navigateからjavascriptを実行する方法では連携不可能でしょうか?
107
+
108
+ ご教授のほど、宜しくお願いいたします。

1

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

2017/07/12 00:59

投稿

Zoohomi
Zoohomi

スコア26

title CHANGED
File without changes
body CHANGED
@@ -21,4 +21,49 @@
21
21
  ```
22
22
 
23
23
  このurl:getKeywordをVBA上から実行し、var data をVBA上コレクションなどに格納し、使用ことは可能でしょうか?
24
- ご教授の程お願いいたしますm(_ _)m
24
+ ご教授の程お願いいたしますm(_ _)m
25
+
26
+ <追記>
27
+ http://piyopiyocs.blog115.fc2.com/blog-entry-433.html
28
+ で紹介されている方法を試しましたが、405エラーが出てしまいます。
29
+
30
+ ```vba
31
+ Private Sub CommandButton1_Click()
32
+ '-----------------
33
+ 'リクエスト生成
34
+ '-----------------
35
+ 'URL(必要に応じて変更)
36
+ Dim url As String
37
+ url = "https://example.com/getKeyword"
38
+
39
+ 'パラメータ(必要に応じて動的に生成)
40
+ Dim paramStr As String
41
+ paramStr = "key=abc"
42
+
43
+ '--------------
44
+ 'POST実行
45
+ '--------------
46
+ Dim xmlhttp As Object
47
+ Set xmlhttp = CreateObject("msxml2.xmlhttp")
48
+ xmlhttp.Open "POST", url, True
49
+ xmlhttp.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
50
+ xmlhttp.send (paramStr) 'パラメータをぽいっちょと
51
+
52
+ '--------------
53
+ '応答取得
54
+ '--------------
55
+ Dim retCd As String
56
+ retCd = xmlhttp.Status 'ここでretCdに405が代入されます。
57
+
58
+ If retCd <> 200 Then
59
+ Debug.Print "error:" & retCd ' error:405 が出力されます
60
+ Else
61
+ Dim retHtml As String
62
+ retHtml = StrConv(xmlhttp.responseBody, vbUnicode, 1041) '結果HTML取得
63
+ Debug.Print retHtml
64
+ End If
65
+ End Sub
66
+ ```
67
+
68
+ コメントにもある通り、error:405が出力されます。
69
+ この方法では取得不可能なのでしょうか・・?