在vba中提交Web表单时,输入文本框值为空

时间:2012-09-26 22:12:36

标签: excel vba excel-vba

我试图通过在表单输入文本框中提供所有值来提交webform,但是当我从excel vba调用提交按钮时,其中一个文本框变空并且抛出了验证错误。

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

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

1 个答案:

答案 0 :(得分:0)

您收到该错误是因为您没有给它足够的时间来验证FROMTO下拉列表的名称(是 - 不是文本框)

尝试此代码(TRIED AND TESTED)。我也在使用IE绑定Late Binding。在代码中更改适用。

Sleep 5000为下拉列表中的文本提供足够的时间来验证自己的下拉列表。

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 2Way 1 (Above)15 SecondsSleep 5000,因为我们未使用checkValidation();进行验证。这不需要您验证下拉菜单。它的作用是绕过在提交按钮的ONCLICK事件中执行的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 javascript。

第2天

{{1}}