2016-11-11 4 views
2

私は誰かが助けることを望んでいます。私はエクセルに保存された情報で数十回または数百回完成しなければならないウェブフォームを満たすプロセスをスピードアップしようとしています。VBA-Excel:IEウィンドウでのフォームの記入

これを行うには、IEウィンドウを開き、特定のWebサイトのログインページ(このビットを見つけ出しました)に移動するためのボタンが1つ必要です。ユーザーはログインして、記入する必要のあるフォームに移動できます。その後、ユーザーがExcelページに戻って、別のボタンをクリックすると、自動的にいくつかのドロップダウンとテキストボックスが表示されます。

Excel内では、フォームに移動する必要のある特定の情報をユーザーが検索できるようにするコードが用意されています。ボタンをクリックして転送するだけです。コードの最初のビットがちょうどこのです:私は悩みを抱えている

Public IE As Object 

Public Sub OpenIE() 
    Set IE = CreateObject("InternetExplorer.Application") 
    IE.Visible = True 
    IE.Navigate "loginpage url" 
End Sub 

ユーザーがログインし、フォームにナビゲートした後、しかし、同じIEウィンドウ異なる機能へのアクセスを持っています。今、私はこれを持っている:私はこのフォーラムの他の記事から得ている、と私はこれで初心者のビットだが、問題はそれがいくつかのためであると思われるものの

Sub FillMacro() 

     Dim sh As Object, oWin As Object 

Set sh = CreateObject("Shell.Application") 

For Each oWin In sh.Windows 
    If TypeName(oWin.document) = "HTMLDocument" Then 
     Set IE = oWin 
     Exit For 
    End If 
Next 

    IE.Visible = True 
    Application.Wait (Now + TimeValue("00:00:01")) 
    IE.document.getElementById("idec").Value = "John" 
    Application.Wait (Now + TimeValue("00:00:01")) 
    IE.document.getElementById("idee").Value = "Smith" 
End Sub 

ほとんどを理由VBAは、LastNameまたはFirstNameのIDを持つテキストボックスを見つけることができません。さらに、IE.Visible = TrueはIEウィンドウをフォアグラウンドに戻さないので、それを行う適切な行を見つけようとしています。私は、コードを実行しようとすると、私が「オブジェクトが必要です」のエラーが表示されます。

IE.document.getElementById("idec").Value = "John" 

私はこのサイトを検索しようとしたと見ていきますが、その間に任意の助けをいただければ幸いです! Internet Explorerのページ

は、ここで私が記入しようとしている最初のテキストボックスの行です:

<input name="componentListPanel:componentListView:1:component:patientLastNameContainer:patientLastName" class="input300" id="idec" type="text" maxlength="60" value=""> 
+2

そのページのフレーム/ iframeはどれですか? –

+0

実際のWebフォームURLを提供できますか?また、IEの自動化の代わりにXHRを使用しようとするかもしれません、手動のフォームの提出の後にIEの開発者ツールのネットワークタブで要求を調べて、それを再現する必要があります。 – omegastripes

+0

フォームは実際にiframe内にあります。 URLまでは、フォームを表示するためにログインする必要があるので、できるかどうか、またはどうすればよいか分かりません。 – WK145

答えて

0

なぜだけでなく、ロギング・プロセスを自動化していませんか?ログインはExcelに保存され、その値はセルからマクロによって読み取られます。

インラインフレームがウェブサイト上で存在する場合ティム・ウィリアムズは(私のためにそれが含まcontentwindowでのみ機能)を使用し、通り:

IE.document.getElementById("iFrameIdHere").contentwindow.document.getEleme‌ntById("idec").Value = "John" 

代わりApplication.Wait使用の:

Do Until IE.ReadyState = 4 And IE.Busy = False 
    DoEvents 
Loop 

それは保存されますロード時間が待ち時間を超過すると、ページの読み込みが高速になり、エラーを防止するのに多くの時間がかかります。ページのリロード後にのみ使用する(移動後の意味や、ページのリロードを引き起こすもの、特にHTML要素の場合は.click

早期バインディングを使用すると、オブジェクトの作成よりも少し早く、ページに基づいて数%読み込み速度、より高速なページロード、大きな増加。

Set IE = New InternetExplorer 

最後に、あなたは、ウェブサイトから画像をダウンロードする必要があるかどうかに応じて、負荷の画像を切り替えることができます。ロード

Public Sub ShowPictures(ByVal EnabledStatus As Boolean) 

Public ScrapingCancelled as Boolean 
Dim obj_Shell 
Dim v_Result As Variant 
Set obj_Shell = CreateObject("WScript.Shell") 

'Reads the registry key that determines whether 'Show pictures' Internet Explorer advanced setting is enabled 

v_Result = obj_Shell.RegRead("HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\Display Inline Images") 

Select Case v_Result 
    Case "yes" 'Pictures are displayed 
      If EnabledStatus = False Then _ 
      obj_Shell.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\Display Inline Images", "no", "REG_SZ" 
    Case "no" 'Pictures are not displayed 
      If EnabledStatus = True Then _ 
      obj_Shell.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\Display Inline Images", "yes", "REG_SZ" 
    Case Else 
      ScrapingCancelled = True 
End Select 

End Sub 

いいえ画像:ロード

ShowPictures (0) 

画像:

ShowPictures (1) 

良い練習はマクロの最後に値を1に設定することです。

+0

ありがとうございました! contentwindowも含めて私のためにそれをやった。ログオンを自動化する限り、それを含めない理由は本当にありませんでした。そこで、私は主要な部分がうまく機能するようになりました。 – WK145

関連する問題