2017-08-13 22 views
0

Internet Explorerが見つかるまで、Windowsシェルを反復するコードを記述しようとしています。このコードには、そのクラス名を含むWebページがあります。問題は、adauga_pariuを設定できない場合、438ランタイムエラーが発生し、エラーハンドラをトリガしないというコードです。実行時エラー438はエラーハンドラを起動しません

i = 0 


Set shellWins = New ShellWindows 

If shellWins.Count > 0 Then 
    For i = 0 To shellWins.Count 

    Set ie = shellWins.Item(i) 

    On Error GoTo error 

    Set adauga_ron = ie.document.getElementsByClassName("KambiBC-outcome-item") 

    If adauga_ron.Length > 0 Then 
     GoTo ok  
    End If 

error: 
    i = i + 1 
    Next i 

End If 

ok: 

答えて

2

エラーは正しく処理されていません。それらを処理したら、Resumeにする必要があります。そうしないと、「エラー処理」モードになり、新しいエラーは処理できません。

'i = 0 '<-- this isn't needed - the "For i = 0" will initialise i to 0 
Set shellWins = New ShellWindows 
If shellWins.Count > 0 Then 
    For i = 0 To shellWins.Count 
     Set ie = shellWins.Item(i) 

     On Error GoTo error 
     Set adauga_ron = ie.document.getElementsByClassName("KambiBC-outcome-item") 

     If adauga_ron.Length > 0 Then 
      On Error GoTo 0 ' To avoid having later errors coming back to this code 
      GoTo ok  
     End If 
     On Error GoTo 0 'Always disable error handling when you don't need it 
errorContinue: 
     'i = i + 1 '<-- don't do this - you are already using a "For i" loop 
    Next i 
End If 
MsgBox "No match found" 
Exit Sub 

error: 
    Resume errorContinue 'Always "Resume" from your error handler 

ok: 
+0

ありがとう、これは仕事ですが、唯一のことは、すべての谷間を繰り返しても、adauga_pariuを設定しなくてもOKになることです。 – Rius2

+0

あなたのコードは、 'ok:'ラベルの後にコードに自動的にドロップされていました。あなたがそれをしたくない場合は、 'If shellWins.Count> 0 Then'の 'End If'の後に処理される' GoTo ok'ステートメントを変更してください。 (おそらく 'Exit Sub '?) – YowE3K

関連する問題