Search code examples
excelvbainternet-explorerautomation

Excel VBA IE automation - VBA Stops after Window.confirm Popup


I'm trying automation in a webpage (.aspx). after uploading the data & remarks, I have to click the submit button. on clicking the Submit button, a window.confirm Popup shows & my vba stops until I click "Ok" or "cancel". if I manually click "OK", another Popup shows, "that my data is updated" and that Popup can be controlled by my Vba.

web page Code submit button

<INPUT onclick=javascript:validate(this); tabIndex=3 id=btnsubmit class=formbutton language=javascript style="WIDTH: 35%" type=submit value=Submit name=btnsubmit>

Validate (this) code

function validate(v)
          {
            
               if (document.forms[0].txtremarks.value=="")
             {
              alert('Remarks is required!');
              document.forms[0].txtremarks.select();
              window.event.returnValue = false;
              return false;
             }
             
               //alert(v.id);
           if (v.id=="btnsubmit")
           {
         
              var c=window.confirm('Do you want to save records?');
            
              if (c==true)
              {
                  document.getElementById("sub_confirm").value=true;
              }
              else if(c==false)
              {
               document.getElementById("sub_confirm").value=false;
              }
           }
          }

My Code after reading some Q&A. after Line 2 (ie IE.document.all("btnsubmit").Click) the Windows.comfirm box Popup & VBA stops. if I click "OK" another Popup shows (that data has been updated) and Popup is controllable by the vba code.

Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

'Sends the specified message to a window or windows. The SendMessage function calls the window procedure
'for the specified window and does not return until the window procedure has processed the message.
Public Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hWND As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

'Retrieves a handle to the top-level window whose class name and window name match the specified strings.
'This function does not search child windows. This function does not perform a case-sensitive search.
Public Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long

'Retrieves a handle to a window whose class name and window name match the specified strings.
'The function searches child windows, beginning with the one following the specified child window.
'This function does not perform a case-sensitive search.
Public Declare PtrSafe Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
(ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, _
ByVal lpsz2 As String) As Long

Public Const BM_CLICK = &HF5&

Sub Carrier_Inspection_Module()

' Some Code to update data from excel, after that..

    IE.document.all("txtremarks").Value = "Ins at Gujarat"
    IE.document.all("btnsubmit").Click
    Application.Wait (Now + TimeValue("0:00:05"))
         
    hWND = FindWindow(vbNullString, "Message from webpage")
    If hWND <> 0 Then childHWND = FindWindowEx(hWND, ByVal 0&, "Button", "OK")
    If childHWND <> 0 Then SendMessage childHWND, BM_CLICK, 0, 0
    
    hWND = FindWindow(vbNullString, "Message from webpage")
    If hWND <> 0 Then childHWND = FindWindowEx(hWND, ByVal 0&, "Button", "OK")
    If childHWND <> 0 Then SendMessage childHWND, BM_CLICK, 0, 0

end Sub

Solution

  • If you only want to skip the pop-up then before clicking submit you can overwrite the window.confirm function with one which just returns true

    With IE.document
        .parentWindow.execScript "window.confirm = function(){return true;};", "JScript"
        .all("btnsubmit").Click
    End with