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
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