2017-07-31 23 views
0

:ここ解決VBAの実行時間91エラー、私はエクセルVBAを使用して、ウェブサイトの入力フィールドに値を入力しようとしている

Dim FileN As Object 
Set FileN = ie.document.getElementsByName("MsgNamePattern") 
MsgBox (FileN) 
If Not FileN Is Nothing And FileN.Length > 0 Then 
     FileN(0).Value = fileName 
End If 

は私が作った入力フィールド

<input name="MsgNamePattern" onblur="validateMessageName(this)" type="text" size="20"> 

のHTMLコードですオブジェクトを正常に設定すると "object HTMLinputelement"と言われるデバッグ用のMsgBoxが、何らかの理由でオブジェクト変数が設定されていないというランタイム91エラーが発生しています。私は次のコードで正常にサイトにログインしました:

Dim UserN As Object 
Set UserN = ie.document.getElementsByName("userid") 
    MsgBox (UserN) 
    If Not UserN Is Nothing And UserN.Length > 0 Then 
     UserN(0).Value = "username" 
    End If 

そして、MsgBoxは "object HTMLinputelement"を返します。ここでは、入力フィールドに、ログのHTMLは次のとおりです。

<input name="userid" class="inputStyle" onchange="document.login.password.focus();" type="text" size="20"> 

私が間違ってやっている私を見ていない、私は正常にログインするには、同じ方法を使用と思ったので、それはありませんなぜ私は混乱しています。ログイン後に検索フィールドのために働いて


はここで全体のコードです:

Sub getComponents() 

    Dim WebAddressIn As String 
    Dim ie As Object 
    Set ie = New InternetExplorer 
    WebAddressIn = "https://edx.standardandpoors.com/mailbox/jsp/login.jsp" 

    Set ie = CreateObject("internetexplorer.application") 
    ie.Navigate2 WebAddressIn 

    Do While (ie.Busy Or ie.readyState <> READYSTATE_COMPLETE) 
     DoEvents 
    Loop 

    ie.Visible = True 

    Dim UserN As Object ' MSHTML.IHTMLElement 
    Dim PW As Object ' MSHTML.IHTMLElement 
    Dim ElementCol As Object ' MSHTML.IHTMLElementCollection 

    Do While ie.Busy 
    Loop 

    ' enter username and password in textboxes 
    Set UserN = ie.document.getElementsByName("userid") 
    MsgBox UserN 
    If Not UserN Is Nothing And UserN.Length > 0 Then 
     ' fill in first element named "username", assumed to be the login name field 
     UserN(0).Value = "username" 
    End If 

    Set PW = ie.document.getElementsByName("password") 
    ' password 
    If Not PW Is Nothing And PW.Length > 0 Then 
     ' fill in first element named "password", assumed to be the password field 
     PW(0).Value = "password" 
    End If 

    Do While ie.Busy 
    Loop 

    Set ElementCol = ie.document.getElementsByName("submit") 
    MsgBox ElementCol 
    For Each btnInput In ElementCol 
     If btnInput.Value = "*Sign In" Then 
      btnInput.Click 
      Exit For 
     End If 
    Next btnInput 

    Do While ie.Busy 
    Loop 

    Do While (ie.Busy Or ie.readyState <> READYSTATE_COMPLETE) 
     DoEvents 
    Loop 

    Do Until ie.readyState = 4 
    Loop 

    Dim fileName As String 
    fileName = Format(Now(), "yyyyMMdd") & "_SPGSCI_PRE_STD.TXT" 

    Dim FileN As Object ' MSHTML.IHTMLElement 
    Dim SearchBox As Object ' MSHTML.IHTMLElementCollection 

    Do While ie.Busy 
    Loop 

    ie.Visible = False 
    ie.Visible = True 

    'Modified to add Tehscript's edit 
    'Set FileN = ie.document.getElementsByName("MsgNamePattern") 
    Do 
     On Error Resume Next 
     Set FileN = ie.document.getElementsByName("MsgNamePattern")(0) 
    Loop Until Err.Number <> 91 

    MsgBox FileN 
    If Not FileN Is Nothing And FileN.Length > 0 Then 
     FileN(0).Value = fileName 
    End If 

    Do While ie.Busy 
    Loop 

    Set SearchBox = ie.document.getElementsByTagName("a") 
    For Each l In SearchBox 
     If l.href = "javascript:myFunction('/mailbox/jsp/MBIList.jsp')" Then 
      l.Click 
    Exit For 
     End If 
    Next l 

    Do While ie.Busy 
    Loop 

End Subの

+0

あなたの問題に関連していません'Nothing'は' Length'プロパティを持たないので、 'UserN'が' Nothing'ならば、 'UserN'はNothingでUserN.Length> 0なら' Cr'はクラッシュします。 – YowE3K

+0

'ie.document'は設定されていますか? FWIW 'UserN'オブジェクトが文字列として何かを返す* defaultプロパティ*を持たない場合、' MsgBox'呼び出しも爆発するでしょう:カッコを削除すると、パラメータが評価されて渡されます値として..は 'MsgBox UserN.Value'でなければなりません。 –

+0

@ Mat's Mug MsgBoxを編集しましたが、何も変更されていないようです(まだ出力されているオブジェクト...)。ie.documentが設定されていることを確認するにはどうすればいいですか?私はまた、質問に自分のコード全体を追加しました。 – user90823745

答えて

0

URLに移動した後、コードに次のコードがあることを確認します。

Do While (ie.Busy Or ie.readyState <> READYSTATE_COMPLETE) 
    DoEvents 
Loop 

それでも「実行時エラー91」を持っている場合は、次のように

Set UserN = ie.document.getElementsByName("userid") 

を置き換えます(私は仮定しているが上起こっている

Do 
    On Error Resume Next 
    Set UserN = ie.document.getElementsByName("userid") 
Loop Until Err.Number <> 91 
+0

FileNにUserNがありませんでしたが、私はその行を置き換えようとしましたが、MsgBoxはポップアップさえしません。私のコードがIf Not FileN ...ループに入ることはないので、入力フィールドはまだ空のままです – user90823745

+0

コードの一部であるため、コード内で "UserN"を "FileN"に、 "userid"を "MsgNamePattern"に変更しました実行時エラーが発生しますが、MsgBoxはポップアップしません。また、F8キーを押してデバッグすると、まだ "Filen Is Nothing ..."ループには入っていないことがわかります – user90823745

+0

@ user90823745私はテストしたランダムなウェブサイトで動作するので、HTMLまたはURLを共有してください。 – Tehscript

関連する問題