Excelスプレッドシートのデータを使用してオンラインフォームに記入する方法を検討中です。 ExcelでVBAモジュールを使用しています。 1)ページ 2に移動します)詳細を入力し 3)詳細 5に記入)次のページ 4に進み、「続行」をクリックして「保存」をクリックしてください):次のように Excel VBAでInternet Explorerオブジェクトをリフレッシュまたは再ロード
手順
ですここではページにを保存するコードです:
Sub FillInternetForm()
'Header Start
Dim IE As Object
Dim ROW As Integer
Dim MAXROW As Integer
Set IE = CreateObject("InternetExplorer.Application")
MAXROW = 3
ROW = 2
'Header End
'Step 1 Navigate to the page
IE.Navigate *PAGE_1_URL*
IE.Visible = True
While IE.Busy Or IE.ReadyState <> 4
DoEvents
Wend
'Step 1 Ends
'Step 2&3 Fill in the details and click "continue"
IE.Document.ALL("ctl00_PageContent_PAYDPaymentMode").Value = "18"
IE.Document.ALL("ctl00_PageContent_PAYDPaymentDate").Value = Cells(ROW, 1).Value
IE.Document.ALL("ctl00_PageContent_PAYDBusinessUnit").Value = "104"
IE.Document.ALL("ctl00_PageContent_PAYDAmountPaid").Value = Cells(ROW, 2).Value
IE.Document.ALL("ctl00_PageContent_ContinueButton__Button").Click
While IE.Busy Or IE.ReadyState <> 4
DoEvents
Wend
'Step 2&3 Ends (IE moved to page 2)
'Step 4&5 Fill in more details and click "Save"
IE.Document.ALL("ctl00_PageContent_BankChequeOrOtherRef").Value = ThisWorkbook.Sheets("sheet1").Cells(ROW, 3).Value
IE.Document.ALL("ctl00_PageContent_PAYDRemarks").Value = ThisWorkbook.Sheets("sheet1").Cells(ROW, 4).Value
IE.Document.ALL("ctl00_PageContent_SaveButton__Button").Click
'Step 4&5 Ends
End Sub
私は3罰金にステップ1を行いました。ただし、手順4になるとエラーが発生します。エラーは次のとおりです。実行時エラー424オブジェクトが必要です。私は、これはモジュールが正確で誤りがあるステップ4
の要素を見つけることができないことを意味していることを認識しています:プロセスを終了する必要があり
IE.Document.ALL("ctl00_PageContent_BankChequeOrOtherRef").Value = ThisWorkbook.Sheets("sheet1").Cells(ROW, 3).Value
前に。ステップ4のコードはどんな問題があるかどうかをデバッグする
は、私はそれを取り出して別々に走りました。私はStep4 & 5のセクション全体とヘッダを取り出して、代わりに2ページ目にナビゲートします。
ので、同様:
Sub FillInternetForm()
Dim IE As Object
Dim ROW As Integer
Dim MAXROW As Integer
Set IE = CreateObject("InternetExplorer.Application")
MAXROW = 3
ROW = 2
IE.Navigate *PAGE_2_URL*
IE.Visible = True
While IE.Busy Or IE.ReadyState <> 4
DoEvents 'wait until IE is done loading page.
Wend
IE.Document.ALL("ctl00_PageContent_BankChequeOrOtherRef").Value = ThisWorkbook.Sheets("sheet1").Cells(ROW, 3).Value
IE.Document.ALL("ctl00_PageContent_PAYDRemarks").Value = ThisWorkbook.Sheets("sheet1").Cells(ROW, 4).Value
IE.Document.ALL("ctl00_PageContent_SaveButton__Button").Click
End Sub
そしてそれは働きました。
何が問題なのかわかりません。私はすべてのelementIDが最初か何かにロードされていて、ページ2のIDがロードされていないと推測していますか?
誰もがこの問題のソースや解決策を知っていますか?ありがとうございました。
P.S.すべての名前要素IDは、Webフォームのソースコードからコピーされて貼り付けられます。正しいものでなければなりません。
編集:私は以下のコメントで問題を更新しました 。
EDIT2は:エクセル2016のコードが完全に働いたとwin10マシン上で正確に同じコードを試してみました。すべての助けをありがとう。
ウェブスクリプトでは、プログラムの終わりまで単に「ハッピーフロー」ではなくオブジェクトが見つかるまで待つのが一般的です。これには、Outright Waits(オブジェクトのテスト)や、Objectの存在を待つことが優先されます。 Webページの読み込みは、常にWeb開発者の変更ページを検討する必要があり、時には接続の問題があります。 – MacroMarc
私は通常、 'WaitForObject(文字列としてのidOrPath、つまりInternetExplorerとしての)As Boolean'のような関数を持っています。次に、関数は異なる命令を扱い、 'ie.Document'オブジェクト内のオブジェクトを見つけることができます。通常は、私が読んで興味のあるHTMLElementまたはルートを見つけようとしているループで、その後、私がそこにいることを期待しているページの他のすべての要素を読み込みます。 – MacroMarc
IDを検索する前に、ページのすべてがロードされるのを待つ特別な方法はありますか?私は「IE.BusyまたはIE.ReadyState <> 4 DoEvents Wend」がそれをしたと思ったが、私は間違っているかもしれないと思った。 –