質問編集履歴

1

VBAプログラミングでやってみる

2020/02/20 03:27

投稿

cristofeer
cristofeer

スコア4

test CHANGED
@@ -1 +1 @@
1
- 【質問】どのプログラミング言語を使えばよろしでしょう
1
+ 【質問】VBAからHTMLへ指定命令がうまくいかない。
test CHANGED
@@ -1,16 +1,12 @@
1
- ### 前提
1
+ ### 挨拶
2
2
 
3
3
 
4
4
 
5
5
  クリスと申します。
6
6
 
7
-
8
-
9
- これからプログラミングを学びたところですが、
7
+ VBAでつまずているのご質問させていただきま
10
-
11
- どのプログラミングを使えば良いのかわからないので
8
+
12
-
13
- ご質問させてださい。
9
+ 宜しお願致します
14
10
 
15
11
 
16
12
 
@@ -18,11 +14,13 @@
18
14
 
19
15
 
20
16
 
21
- まず、ブラウザーでログインをするメールの内容をスキャンし、
17
+ まず、ブラウザーでログインをしてメールの内容をスキャン
18
+
22
-
19
+ 内容に含まれている文書が「〇〇〇」
20
+
23
- であればエクセルのセルに○
21
+ であればエクセルのセルに○
24
-
22
+
25
- ×であればエクセルのセルに×
23
+ であればエクセルのセルに×
26
24
 
27
25
 
28
26
 
@@ -58,7 +56,7 @@
58
56
 
59
57
 
60
58
 
61
- メールの題名を確認し「○○○○」であれば
59
+ メールの題名を確認し「○○○○」であればクリック
62
60
 
63
61
 
64
62
 
@@ -68,15 +66,229 @@
68
66
 
69
67
 
70
68
 
71
- まだ、Excelに書き込む事もしたいのでとりあえずはここまでですが、
72
-
73
-
74
-
75
- どの言語を使えばきますでしょうか?
76
-
77
-
78
-
79
- プログラミングには少し経験ありますので、基礎は存じております。
69
+ まだ、Excelに書き込む事もしたいのでとりあえずはここまでです
70
+
71
+
72
+
73
+ ### 現時点出来上がっているソースコード
74
+
75
+ ```VBA
76
+
77
+ Option Explicit
78
+
79
+
80
+
81
+ Sub IE()
82
+
83
+
84
+
85
+ '---コード1|インターネットに接続してブラウザを開く---
86
+
87
+ Dim objIE As InternetExplorer
88
+
89
+ Set objIE = CreateObject("InternetExplorer.Application")
90
+
91
+ objIE.Visible = True
92
+
93
+
94
+
95
+ '---コード2|インターネットの特定のページを開く---
96
+
97
+ objIE.Navigate "指定URL"
98
+
99
+ Call IEWait(objIE) 'IEを待機
100
+
101
+ 'Call WaitFor(3) '3秒停止
102
+
103
+
104
+
105
+ '---コード3|IEに自動で文字入力して情報検索する---
106
+
107
+ 'キーワードを取得
108
+
109
+ Dim s As String
110
+
111
+ Dim p As String
112
+
113
+ s = "kariuser"
114
+
115
+ p = "karipass"
116
+
117
+ Dim objtag, objsubmit As Object
118
+
119
+ For Each objtag In objIE.document.getElementsByName("USERID")
120
+
121
+ If InStr(objtag.outerHTML, """loginInput""") > 0 Then
122
+
123
+ objtag.Value = s
124
+
125
+ Call WaitFor(3)
126
+
127
+ Exit For
128
+
129
+ End If
130
+
131
+ Next
132
+
133
+
134
+
135
+ For Each objtag In objIE.document.getElementsByName("PASSWD")
136
+
137
+ If InStr(objtag.outerHTML, """loginInput""") > 0 Then
138
+
139
+ objtag.Value = p
140
+
141
+ Call WaitFor(3)
142
+
143
+ Exit For
144
+
145
+ End If
146
+
147
+ Next
148
+
149
+
150
+
151
+
152
+
153
+ For Each objsubmit In objIE.document.getElementsByTagName("input")
154
+
155
+ If InStr(objsubmit.outerHTML, """Login""") > 0 Then
156
+
157
+ objsubmit.Click
158
+
159
+ Call WaitFor(5)
160
+
161
+ Exit For
162
+
163
+ End If
164
+
165
+ Next
166
+
167
+
168
+
169
+ Dim objtag2 As Object
170
+
171
+ For Each objtag2 In objIE.document.getElementsByTagName("a")
172
+
173
+ If InStr(objtag2.outerHTML, "TreeNode") > 0 Then
174
+
175
+ objtag2.Click
176
+
177
+ 'Call WaitFor(3)
178
+
179
+ Exit For
180
+
181
+ End If
182
+
183
+ Next
184
+
185
+
186
+
187
+
188
+
189
+
190
+
191
+ '---コード5|IEを閉じる---
192
+
193
+ 'objIE.Quit
194
+
195
+ Set objIE = Nothing
196
+
197
+
198
+
199
+ End Sub
200
+
201
+
202
+
203
+
204
+
205
+ '---コード2-1|IEを待機する関数---
206
+
207
+ Function IEWait(ByRef objIE As Object)
208
+
209
+ Do While objIE.Busy = True Or objIE.ReadyState <> 4
210
+
211
+ DoEvents
212
+
213
+ Loop
214
+
215
+ End Function
216
+
217
+
218
+
219
+ '---コード2-2|指定した秒だけ停止する関数---
220
+
221
+ Function WaitFor(ByVal second As Integer)
222
+
223
+ Dim futureTime As Date
224
+
225
+
226
+
227
+ futureTime = DateAdd("s", second, Now)
228
+
229
+
230
+
231
+ While Now < futureTime
232
+
233
+ DoEvents
234
+
235
+ Wend
236
+
237
+ End Function
238
+
239
+ ```
240
+
241
+
242
+
243
+ ###つまずいているところ
244
+
245
+ ```VBA
246
+
247
+ Dim objtag2 As Object
248
+
249
+ For Each objtag2 In objIE.document.getElementsByTagName("a")
250
+
251
+ If InStr(objtag2.outerHTML, "TreeNode") > 0 Then
252
+
253
+ objtag2.Click
254
+
255
+ 'Call WaitFor(3)
256
+
257
+ Exit For
258
+
259
+ End If
260
+
261
+ ```
262
+
263
+
264
+
265
+ 参照先HTMLコード
266
+
267
+ ```HTML
268
+
269
+ <a href="#" class="TreeNode" style="text-decoration: none;">
270
+
271
+ <span style="font-size: 100%; font-family: Arial; height: 15px; line-height: 15px; display: inline-block; vertical-align: middle; margin: 0px; padding: 0px; width: 16px; background: url(&quot;http://url&quot;) -400px 0px no-repeat;">
272
+
273
+ </span>
274
+
275
+ 連絡済み
276
+
277
+ <span></span>
278
+
279
+ </a>
280
+
281
+ ```
282
+
283
+
284
+
285
+ こちらの部分を指定したいのですが Class属性="TreeNode"はページ上で複数存在されていて、 "連絡済み" もソースコードで検索掛けたところ、2件みつかりました。
286
+
287
+ あくまでも私の勝手な思いですが、複数存在されているのでプログラムはその判定ができず、結果的に失敗しているのではないのでしょうか
288
+
289
+
290
+
291
+ また、つまずいているVBAの加工をすればできそうな気もするのですが、ご存じな方いらっしゃいますでしょうか
80
292
 
81
293
 
82
294