以vba提交网页表单时,input文本框的值为空

我试图通过提供表单input文本框中的所有值提交networking表单,但是当我调用提交button单击从Excel VBA中,其中一个文本框变为空,并引发validation错误。

Sub Click_Btn() Dim objForms As Object Dim vTxtInput As Variant 'Set objIE = GetIEApp Set objIE = New InternetExplorer 'Make sure an IE object was hooked If TypeName(objIE) = "Nothing" Then MsgBox "Could not hook Internet Explorer object", _ vbCritical, "GetFields() Error" 'GoTo Clean_Up End If objIE.Navigate "http://fly3.emirates.com/CAB/IBE/SearchAvailability.aspx" objIE.Visible = True Sleep 5000 Set objForms = objIE.document.all 'Choose one way Flights objIE.document.getElementById("ctl00_c_CtWNW_onewaySearch").Click Sleep 1000 objIE.document.getElementById("ctl00_c_CtWNW_ddlTo-suggest").Value = "Sydney (SYD)" ' Departure objIE.document.getElementById("ctl00_c_CtWNW_ddlFrom-suggest").Value = "Mumbai (BOM)" ' Departure Date objIE.document.getElementById("ctl00_c_CtWNW_txtDepartDate").Value = "28 Sep 12" Sleep 1000 objIE.document.getElementById("ctl00_c_FS_FF").Click End Sub 

当我点击表单的提交button时, ctl00_c_CtWNW_ddlTo-suggest文本框变空了,出现错误。

你得到这个错误是因为你没有足够的时间来validationFROMTO Dropdowns的名字(Yes – not Text Boxes)

试试这个代码(TRIED AND TESTED)。 另外我使用IE浏览器的Late Binding。 根据您的代码进行更改。

Sleep 5000给下拉的文本足够的时间来validation自己的下拉列表。

 Option Explicit Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub Click_Btn() Dim objForms As Object Dim vTxtInput As Variant Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") 'Make sure an IE object was hooked If TypeName(objIE) = "Nothing" Then MsgBox "Could not hook Internet Explorer object", _ vbCritical, "GetFields() Error" 'GoTo Clean_Up End If objIE.Navigate "http://fly3.emirates.com/CAB/IBE/SearchAvailability.aspx" objIE.Visible = True Sleep 5000 Set objForms = objIE.document.all '~~> Choose one way Flights objIE.document.getElementById("ctl00_c_CtWNW_onewaySearch").Click '~~> From objIE.document.getElementById("ctl00_c_CtWNW_ddlFrom-suggest").Focus objIE.document.getElementById("ctl00_c_CtWNW_ddlFrom-suggest").Value _ = "Mumbai (BOM)" Sleep 5000 '~~> Departure Date objIE.document.getElementById("ctl00_c_CtWNW_txtDepartDate").Focus objIE.document.getElementById("ctl00_c_CtWNW_txtDepartDate").Value _ = "28 Sep 12" Sleep 5000 '~~> To objIE.document.getElementById("ctl00_c_CtWNW_ddlTo-suggest").Focus objIE.document.getElementById("ctl00_c_CtWNW_ddlTo-suggest").Value _ = "Sydney (SYD)" Sleep 5000 objIE.document.getElementById("ctl00_c_FS_FF").Focus objIE.document.getElementById("ctl00_c_FS_FF").Click End Sub 

编辑

这里是Way 2 ,比Way 1 (Above)15 Seconds因为我们没有使用Sleep 5000validation。 这并不要求您validation下拉菜单。 它所做的是绕过checkValidation(); 在提交button的ONCLICK事件中执行的JavaScript。

方法2

 Option Explicit Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub Click_Btn() Dim objForms As Object Dim vTxtInput As Variant Dim objIE As Object Set objIE = CreateObject("InternetExplorer.Application") 'Make sure an IE object was hooked If TypeName(objIE) = "Nothing" Then MsgBox "Could not hook Internet Explorer object", _ vbCritical, "GetFields() Error" 'GoTo Clean_Up End If objIE.Navigate "http://fly3.emirates.com/CAB/IBE/SearchAvailability.aspx" objIE.Visible = True Sleep 5000 Set objForms = objIE.document.all 'Choose one way Flights objIE.document.getElementById("ctl00_c_CtWNW_onewaySearch").Click ' From objIE.document.getElementById("ctl00_c_CtWNW_ddlFrom-suggest").Focus objIE.document.getElementById("ctl00_c_CtWNW_ddlFrom-suggest").Value _ = "Mumbai (BOM)" ' Departure Date objIE.document.getElementById("ctl00_c_CtWNW_txtDepartDate").Focus objIE.document.getElementById("ctl00_c_CtWNW_txtDepartDate").Value _ = "28 Sep 12" ' To objIE.document.getElementById("ctl00_c_CtWNW_ddlTo-suggest").Focus objIE.document.getElementById("ctl00_c_CtWNW_ddlTo-suggest").Value _ = "Sydney (SYD)" objIE.document.getElementById("ctl00_c_FS_FF").Focus objIE.document.getElementById("ctl00_c_FS_FF").onclick = _ Replace(objIE.document.getElementById("ctl00_c_FS_FF").onclick, _ "checkValidation();", "true;") objIE.document.getElementById("ctl00_c_FS_FF").Click End Sub