2016-09-11 9 views
0
Sub WebTry() 

Dim objIE As Object 'special object variable representing the IE browser 
Dim l As Object 'special object variable for an <a> (link) element 

Set objIE = CreateObject("INTERNETEXPLORER.Application") 

objIE.Visible = True 

sUser = "username" 
sPass = "password" 

objIE.navigate "https://mywebsitecomeshere" 

Do While objIE.busy = True Or objIE.readystate <> 4: DoEvents: Loop 


objIE.document.all.Item("USER").Value = sUser 
objIE.document.all.Item("PASSWORD").Value = sPass 
objIE.document.all.Item("loginbtn").Click 
Do While objIE.busy = True Or objIE.readystate <> 4: DoEvents: Loop 

objIE.document.all.Item("image5").Click 
Do While objIE.busy = True Or objIE.readystate <> 4: DoEvents: Loop 

End 

objIE.document.all.Item("image5").Click行にエラーが発生しています。
私の実際の要件は、資格情報を使ってウェブサイトにログインすることです。次に、ウェブサイトの別のボタン(<img id="image5" src="https://abc/cde/efg" alt="Time" name="image5"> </img>)を自動的にクリックします。
私はVBAに新たなんだと、私はドキュメントが完全に読み込まれる前に、IEの要素にアクセスするVB/VBAを使用する前に、このエラーを見てきました事前このコードに設定されていないオブジェクト変数またはブロック変数を解決する方法

+0

HTMLソース:Time

+0

イメージに定義されたリンクまたはアクションはありますか?あなたは画像の代わりにこのメトードを呼んでみましたか?イメージがクリックされるとどうなりますか? (0).Click ' –

+0

そして、 'objIE.document.all.Item(")の後ろにブレークポイントを置くと、 loginbtn ")。あなたは何を見ますか?あなたの質問では、 'loginbtn'がクリックされた後に何が起こるべきかを言っていませんでした。私は次のページが 'image5'で読み込まれていると仮定します。クリックがVBAコードから呼び出された後はどうなりますか?次のページが表示されますか?おそらく 'objIE.document.all.Item(" loginbtn ")。Click'はうまくいかず、IE文書はまだログインページを指していますか? – dee

答えて

1

で 感謝を助けてください。明らかにreadystateプロパティは、あなたが思うように常に動作するとは限りません。

文書内にある要素をクリックする最も安全な方法は、実際に参照できるまで待つことです。

セーフガードとして、オブジェクトの名前が変更されたり、存在しない場合は、ループを3回試行するように制限する必要があります。

objIE.document.all.Item("image5").Click 

要素をチェックするこのコードを追加します。あなたはこのラインで画像をクリックする前に

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 

:あなたのモジュールの上部に

は、遅延関数を挿入しますID:

Dim numTries As Integer 
Do While IsNull(objIE.Document.getelementbyid("image5")) 
    numTries = numTries + 1 
    If numTries > 3 Then Exit Do 
    DoEvents 
    Sleep 1000 ' Delay one second 
Loop 
If IsNull(objIE.Document.getelementbyid("image5")) Then 
    Msgbox "No Image5 Found" 
Endif 
+0

Private Declare Sub Sleep Lib "kernel32"(ByVal dwMilliseconds As Long)行を追加すると、 "End Sub、End Function、End Propertyの後にコメントしか表示されない"というエラーが表示されます。 誰かが私を助けることができれば、何かできません。私たちは電話に乗ることを知らせてください。事前にありがとうございます –

+0

あなたからもう一度お聞きしてうれしいです...太字の指示を読んだことがありますか?**あなたのモジュールの一番上に遅延機能を挿入してください:** - 強調は "あなたのモジュールの最上部" – dbmitch