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

質問編集履歴

1

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

2020/02/20 03:27

投稿

cristofeer
cristofeer

スコア4

title CHANGED
@@ -1,1 +1,1 @@
1
- 【質問】どのプログラミング言語を使えばよろしいでしょうか
1
+ 【質問】VBAからHTMLへ指定命令がまくいない。
body CHANGED
@@ -1,16 +1,15 @@
1
- ### 前提
1
+ ### 挨拶
2
2
 
3
3
  クリスと申します。
4
+ VBAでつまずいているのでご質問させていただきます。
5
+ 宜しくお願い致します。
4
6
 
5
- これからプログラミングを学びたいところですが、
6
- どのプログラミングを使えば良いのかわからないので
7
- ご質問させてください。
8
-
9
7
  ### やりたい事
10
8
 
11
- まず、ブラウザーでログインをするメールの内容をスキャンし、
9
+ まず、ブラウザーでログインをしてメールの内容をスキャン
10
+ 内容に含まれている文書が「〇〇〇」
12
- であればエクセルのセルに○
11
+ であればエクセルのセルに○
13
- ×であればエクセルのセルに×
12
+ であればエクセルのセルに×
14
13
 
15
14
  ### 私の考え方
16
15
 
@@ -28,15 +27,122 @@
28
27
 
29
28
  フォルダー指定 (受信ボックス、ごみ箱、迷惑メール等)
30
29
 
31
- メールの題名を確認し「○○○○」であれば
30
+ メールの題名を確認し「○○○○」であればクリック
32
31
 
33
32
  メールの内容をチェックして「○」であれば→環境変数
34
33
  「×」であれば→ メッセージボックスを出したいです。
35
34
 
36
- まだ、Excelに書き込む事もしたいのでとりあえずはここまでですが、
35
+ まだ、Excelに書き込む事もしたいのでとりあえずはここまでです
37
36
 
37
+ ### 現時点で出来上がっているソースコード
38
+ ```VBA
38
- どの言語を使えばできますでしょうか?
39
+ Option Explicit
39
40
 
40
- プログラミングには少し経験ありますので、基礎は存じております。
41
+ Sub IE()
41
42
 
43
+ '---コード1|インターネットに接続してブラウザを開く---
44
+ Dim objIE As InternetExplorer
45
+ Set objIE = CreateObject("InternetExplorer.Application")
46
+ objIE.Visible = True
47
+
48
+ '---コード2|インターネットの特定のページを開く---
49
+ objIE.Navigate "指定URL"
50
+ Call IEWait(objIE) 'IEを待機
51
+ 'Call WaitFor(3) '3秒停止
52
+
53
+ '---コード3|IEに自動で文字入力して情報検索する---
54
+ 'キーワードを取得
55
+ Dim s As String
56
+ Dim p As String
57
+ s = "kariuser"
58
+ p = "karipass"
59
+ Dim objtag, objsubmit As Object
60
+ For Each objtag In objIE.document.getElementsByName("USERID")
61
+ If InStr(objtag.outerHTML, """loginInput""") > 0 Then
62
+ objtag.Value = s
63
+ Call WaitFor(3)
64
+ Exit For
65
+ End If
66
+ Next
67
+
68
+ For Each objtag In objIE.document.getElementsByName("PASSWD")
69
+ If InStr(objtag.outerHTML, """loginInput""") > 0 Then
70
+ objtag.Value = p
71
+ Call WaitFor(3)
72
+ Exit For
73
+ End If
74
+ Next
75
+
76
+
77
+ For Each objsubmit In objIE.document.getElementsByTagName("input")
78
+ If InStr(objsubmit.outerHTML, """Login""") > 0 Then
79
+ objsubmit.Click
80
+ Call WaitFor(5)
81
+ Exit For
82
+ End If
83
+ Next
84
+
85
+ Dim objtag2 As Object
86
+ For Each objtag2 In objIE.document.getElementsByTagName("a")
87
+ If InStr(objtag2.outerHTML, "TreeNode") > 0 Then
88
+ objtag2.Click
89
+ 'Call WaitFor(3)
90
+ Exit For
91
+ End If
92
+ Next
93
+
94
+
95
+
96
+ '---コード5|IEを閉じる---
97
+ 'objIE.Quit
98
+ Set objIE = Nothing
99
+
100
+ End Sub
101
+
102
+
103
+ '---コード2-1|IEを待機する関数---
104
+ Function IEWait(ByRef objIE As Object)
105
+ Do While objIE.Busy = True Or objIE.ReadyState <> 4
106
+ DoEvents
107
+ Loop
108
+ End Function
109
+
110
+ '---コード2-2|指定した秒だけ停止する関数---
111
+ Function WaitFor(ByVal second As Integer)
112
+ Dim futureTime As Date
113
+
114
+ futureTime = DateAdd("s", second, Now)
115
+
116
+ While Now < futureTime
117
+ DoEvents
118
+ Wend
119
+ End Function
120
+ ```
121
+
122
+ ###つまずいているところ
123
+ ```VBA
124
+ Dim objtag2 As Object
125
+ For Each objtag2 In objIE.document.getElementsByTagName("a")
126
+ If InStr(objtag2.outerHTML, "TreeNode") > 0 Then
127
+ objtag2.Click
128
+ 'Call WaitFor(3)
129
+ Exit For
130
+ End If
131
+ ```
132
+
133
+ 参照先HTMLコード
134
+ ```HTML
135
+ <a href="#" class="TreeNode" style="text-decoration: none;">
136
+ <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;">
137
+ </span>
138
+ 連絡済み
139
+ <span></span>
140
+ </a>
141
+ ```
142
+
143
+ こちらの部分を指定したいのですが Class属性="TreeNode"はページ上で複数存在されていて、 "連絡済み" もソースコードで検索掛けたところ、2件みつかりました。
144
+ あくまでも私の勝手な思いですが、複数存在されているのでプログラムはその判定ができず、結果的に失敗しているのではないのでしょうか
145
+
146
+ また、つまずいているVBAの加工をすればできそうな気もするのですが、ご存じな方いらっしゃいますでしょうか
147
+
42
148
  引き続きよろしくお願い致します。