回答編集履歴

2

IE表示待ちのコード追加

2018/12/05 13:30

投稿

TanakaHiroaki
TanakaHiroaki

スコア1063

test CHANGED
@@ -71,3 +71,165 @@
71
71
  また、Sleep関数は 64bitでもLongで渡します。
72
72
 
73
73
  Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As Long)
74
+
75
+
76
+
77
+ <追記>
78
+
79
+ 私が普段使っているIE表示待ちも試してみてください。
80
+
81
+ これでダメならお役に立てそうにありません。
82
+
83
+ ```VBA
84
+
85
+ Public Sub Myloop(ByRef ie As Object)
86
+
87
+
88
+
89
+ Dim nowURL As String
90
+
91
+ nowURL = ie.LocationURL
92
+
93
+
94
+
95
+ Dim IEretry As Boolean: IEretry = False
96
+
97
+ Dim RepeatSec As Single: RepeatSec = Timer
98
+
99
+
100
+
101
+ On Error GoTo INVALID
102
+
103
+
104
+
105
+ Do While ie.Busy = True Or ie.readyState < 4 'READYSTATE_COMPLETE
106
+
107
+ DoEvents: Sleep 200 '200ms停止
108
+
109
+
110
+
111
+ If (Timer - RepeatSec) > 80 Then
112
+
113
+ Debug.Print ie.readyState
114
+
115
+ MsgBox "サーバーが応答していません。インターネット接続をご確認後、再度実行してください。"
116
+
117
+ ie.Quit
118
+
119
+ End
120
+
121
+ ElseIf (Timer - RepeatSec) > 40 And IEretry = False Then
122
+
123
+ 'IEの再読み込みは1回限りとする
124
+
125
+ IEretry = True
126
+
127
+ On Error Resume Next
128
+
129
+ ie.Refresh
130
+
131
+ Debug.Print "ie.Refresh/エラー番号:" & Err.Number & vbNewLine & "エラーの種類:" & Err.Description
132
+
133
+ On Error GoTo INVALID
134
+
135
+ End If
136
+
137
+ Loop
138
+
139
+
140
+
141
+ DoEvents
142
+
143
+
144
+
145
+ Do While ie.document.readyState <> "complete"
146
+
147
+ DoEvents: Sleep 200 '200ms停止
148
+
149
+
150
+
151
+ If (Timer - RepeatSec) > 100 Then
152
+
153
+ Debug.Print ie.document.readyState
154
+
155
+ ie.Quit
156
+
157
+ MsgBox "ドキュメントを取得できません。インターネット接続をご確認後、再度実行してください。"
158
+
159
+ End
160
+
161
+ End If
162
+
163
+ Loop
164
+
165
+
166
+
167
+ '念のため確認
168
+
169
+ DoEvents: Sleep 1: DoEvents
170
+
171
+ If ie.Busy = True Or ie.readyState < 4 Then
172
+
173
+ Call Myloop(ie) '再帰呼出
174
+
175
+ End If
176
+
177
+
178
+
179
+ Exit Sub
180
+
181
+
182
+
183
+ INVALID:
184
+
185
+
186
+
187
+ Debug.Print "エラー番号:" & Err.Number & vbNewLine & "エラーの種類:" & Err.Description
188
+
189
+
190
+
191
+ If Err.Number = 70 Then
192
+
193
+ '実行時エラー「書き込みできません。」(70)は想定内なので無視。
194
+
195
+ On Error GoTo 0
196
+
197
+ MsgBox "IE読み込み時にエラー発生。処理を継続します。"
198
+
199
+
200
+
201
+ ElseIf Err.Number = -2147417848 Then
202
+
203
+ On Error GoTo 0
204
+
205
+ '新規IEオブジェクト作成
206
+
207
+ Dim getIE As Object
208
+
209
+ Set getIE = CreateObject("InternetExplorer.Application")
210
+
211
+ getIE.Visible = True
212
+
213
+ getIE.navigate nowURL 'URL指定
214
+
215
+
216
+
217
+ MsgBox "対象IEが存在しないため、IEを起動します。"
218
+
219
+ Set ie = getIE
220
+
221
+ getIE = Nothing
222
+
223
+
224
+
225
+ Else
226
+
227
+ '上記以外はエラーを発生させる。
228
+
229
+ Err.Raise Err.Number
230
+
231
+ End If
232
+
233
+ End Sub
234
+
235
+ ```

1

Sleep関数について補足

2018/12/05 13:30

投稿

TanakaHiroaki
TanakaHiroaki

スコア1063

test CHANGED
@@ -1,6 +1,4 @@
1
1
  IE表示待ちでしつこくステータスを確認してはどうでしょうか。
2
-
3
-
4
2
 
5
3
  ```VBA
6
4
 
@@ -67,3 +65,9 @@
67
65
  End Function
68
66
 
69
67
  ```
68
+
69
+
70
+
71
+ また、Sleep関数は 64bitでもLongで渡します。
72
+
73
+ Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As Long)