2

フォーム入力テキスト ボックスにすべての値を指定して Web フォームを送信しようとしていますが、Excel VBA から送信ボタンをクリックすると、テキスト ボックスの 1 つが空になり、検証エラーがスローされます。

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テキスト ボックスが空になり、エラーが発生します。

4

1 に答える 1

0

FROMおよびドロップダウンの名前を検証するのに十分な時間を与えていないため、そのエラーが発生していますTO(はい-テキストボックスではありません)

このコードを試してください (試行およびテスト済み)。また、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

編集

これは、検証に使用していないため、 byWay 2よりも高速です。これには、ドロップダウンを検証する必要はありません。それが行うことは、送信ボタンの ONCLICK イベントで実行される JavaScript をバイパスすることです。Way 1 (Above)15 SecondsSleep 5000checkValidation();

方法 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
于 2012-09-27T05:06:43.400 に答える