2016-12-13 9 views
0

私は非常に基本的なスクリプトを用意していますが、Excelスプレッドシートを使ってフォームに入力しています。フィールドにデータを挿入し、各ページの[送信]ボタンをクリックするのを待ちます。次に、ページがロードされるのを待って、次のフィールドのセットを埋めます。私はサブミット、次のページの読み込みなどをクリックします。最後に、最後の2ページで私はスプレッドシートではできない手動入力をしなければなりません。これまでのコードを以下に示します。私は今、そこに持っているものの終わりにExcel VBAを一時停止し、ループ前にユーザーとのやりとりを待つ方​​法

私の質問があり、、どのように私は私が記入するのを待つシステムを作ることができる最後のページ、その後、私はそれが提出されていることを実感送信するととスプレッドシートの行をインクリメントして、最初からやり直して次の学生のためにもう一度やり直すことができますか?

私はプログラマーではないと言えるでしょう。200人の学生全員に手動でこれらの書式を記入し、あなたが見ているコードの大半を得た音楽教師です。チュートリアル。


Function FillInternetForm() 
    Dim IE As Object 
    Set IE = CreateObject("InternetExplorer.Application") 
'create new instance of IE. use reference to return current open IE if 
'you want to use open IE window. Easiest way I know of is via title bar. 
    IE.Navigate "https://account.makemusic.com/Account/Create/?ReturnUrl=/OpenId/VerifyGradebookRequest" 
'go to web page listed inside quotes 
    IE.Visible = True 
    While IE.busy 
    DoEvents 'wait until IE is done loading page. 
    Wend 
     IE.Document.All("BirthMonth").Value = "1" 
      IE.Document.All("BirthYear").Value = "2000" 
    IE.Document.All("Email").Value = ThisWorkbook.Sheets("queryRNstudents").Range("f2") 
    IE.Document.All("Password").Value = ThisWorkbook.Sheets("queryRNstudents").Range("e2") 
     IE.Document.All("PasswordConfirm").Value = ThisWorkbook.Sheets("queryRNstudents").Range("e2") 
      IE.Document.All("Country").Value = "USA" 
    IE.Document.All("responseButtonsDiv").Click 

newHour = Hour(Now()) 
newMinute = Minute(Now()) 
newSecond = Second(Now()) + 3 
waitTime = TimeSerial(newHour, newMinute, newSecond) 
Application.Wait waitTime 

     IE.Document.All("FirstName").Value = ThisWorkbook.Sheets("queryRNstudents").Range("a2") 
    IE.Document.All("LastName").Value = ThisWorkbook.Sheets("queryRNstudents").Range("b2") 
    IE.Document.All("Address1").Value = "123 Nowhere St" 
    IE.Document.All("City").Value = "Des Moines" 
    IE.Document.All("StateProvince").Value = "IA" 
    IE.Document.All("ZipPostalCode").Value = "50318" 



End Function 
+0

また、...... getElementsByID ....のTagNameを使用し、その可能性とあなたは同じIDで2つのコントロール以上を持つことができ、クラス名をすべて使用してからx番目の配列要素を使用していませんそれが1より大きい場合に計画が全てを設定するのでなければ –

答えて

1

私は、フォーム、このような何か、MSHTMLライブラリをコントロール使用して、より具体的には、IEのイベントを使用します。

Private WithEvents IEForm As MSHTML.HTMLFormElement 

Public Sub InternetExplorerTest() 

Dim ie As SHDocVw.InternetExplorer 
Dim doc As MSHTML.HTMLDocument 

Set ie = New SHDocVw.InternetExplorer 
ie.Visible = 1 
ie.navigate "http://stackoverflow.com/questions/tagged/vba" 

While ie.readyState <> READYSTATE_COMPLETE Or ie.Busy 
    DoEvents 
Wend 

Set doc = ie.document 
Set IEForm = doc.forms(0) 

End Sub 

Private Function IEForm_onsubmit() As Boolean 
    MsgBox "Form Submitted" 
End Function 
関連する問題