2

I have automated my Internet Explorer to fill out a lot of information throughout the webform. When my VBA script clicks the transfer htmlelement it runs the Javascript which opens a new msgbox where I need to click "ok" or "Cancel". I want my script to click "ok" to this. This stops code untill any further action is made to the popup window created by the javascript, hence Sendkeys will not work. The below element is from the HTML of the webpage which i am trying to interact with:

<input type="image" name="ctl00$PlaceHolderMain$TestControl$
                  CertificateSearchControl$cmdTransfer"
id="ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_cmdTransfer"
class="kantele-small-icon" src="../../_layouts/Images/Empty.gif" 
alt="Transfer" 
onclick="return confirmOnTransfer();WebForm_DoPostBackWithOptions(new   
 WebForm_PostBackOptions(&quot;ctl00$PlaceHolderMain$TestControl1
 $CertificateSearchControl$cmdTransfer&quot;, &quot;&quot;, true,   
  &quot;Transfer&quot;, &quot;&quot;, false, false))" 
  style="border-width:0px;" />

I use the following command to call the Transfer button:

Set HTMLDoc = ie.document
  HTMLDoc.all.Item("ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_cmdTransfer").Click

Can anyone help me find a solution to this issue?

A similar question has been answered in another post, but I cant seem to get the solution to work in my script.

Handle Pop-Up While Navigating with IE

All help will be greately appriciated.

Update 08032015:

function confirmOnTransfer() {        

if (typeof (Page_ClientValidate) == "function" && Page_ClientValidate()) {

  var volume = document.getElementById('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_txtCertificateCount').value.trim();
  var oDDL = document.getElementById('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_ddlTransferDomain');
  var oDDL2 = document.getElementById('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_ddlTransferActor');
  var oDDL3 = document.getElementById('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_ddlTransferAccount');
  var checkbox = document.getElementById('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_chkAcc');
  var selectedVolume = document.getElementById('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_hdnFinalVolume').value.trim();

//Issue 3982: 1496 - Error: Agreement date is after transaction date
  var contractDateDefaultValue = 0;
       if (document.getElementById('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_txtContractDate') != null) {

       var currentDate = new Date();
       var currmonth;
       var currDate;

// in java script the month is saved to array in array starts to zero so the if getmonth() means we canot retrieve current month so we should add +1
                    var currmonth = currentDate.getMonth() + 1;
                    //In our application the date should be "2013-06-20" so here the month or date length is less than two means we should add '0' to bfore the date or month
                    if (currmonth.toString().length < 2)
                        currmonth = '0' + currmonth;

                    var currDate = currentDate.getDate();
                    if (currentDate.getDate().toString().length < 2)
                        currDate = '0' + currDate;

                    var currentDateText = currentDate.getFullYear() + '-' + currmonth + '-' + currDate;

                    var currentDateArr = currentDateText.toString().split('-');

                    var ContactDateArr = document.getElementById('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_txtContractDate').value.toString().split('-');

                    if (ContactDateArr[0] > currentDateArr[0]
                    || (ContactDateArr[0] == currentDateArr[0] && currentDateArr[1] == ContactDateArr[1] && currentDateArr[2] < ContactDateArr[2])
                    || (ContactDateArr[0] == currentDateArr[0] && currentDateArr[1] < ContactDateArr[1])) {
                        alert(document.getElementById('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_hdnContractDateValidation').value)
//if the alert received means we should assign this value based on this value we control to next condition to confirmation of transfer alert
                        contractDateDefaultValue = 1;
                        return false;
                    }

Update 01042015 (NOT an aprils fools joke)

                        <td height="28px"><input name="ctl00$PlaceHolderMain$TestControl1$CertificateSearchControl$CertificateBundleReport$ctl05$ctl03$ctl00" type="text" maxlength="255" size="10" id="ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport_ctl05_ctl03_ctl00" disabled="disabled" title="Find Text" style="font-family:Verdana;font-size:8pt;" /></td><td width="4px"></td><td height="28px"><a id="ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport_ctl05_ctl03_ctl01" title="Find" href="#" style="font-family:Verdana;font-size:8pt;color:Gray;text-decoration:none;white-space:nowrap;">Find</a></td><td width="4px"></td><td height="28px"><span style="font-family:Verdana;font-size:8pt;">|</span></td><td width="4px"></td><td height="28px"><a id="ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport_ctl05_ctl03_ctl03" title="Find Next" href="#" style="font-family:Verdana;font-size:8pt;color:Gray;text-decoration:none;white-space:nowrap;">Next</a></td>
                                </tr>
                            </table>
                        </div><table cellpadding="0" cellspacing="0" ToolbarSpacer="true" style="display:inline-block;width:20px;">
                            <tr>
                                <td></td>
                            </tr>
                        </table><div class=" " style="display:inline-block;font-family:Verdana;font-size:8pt;vertical-align:top;">
                            <table cellpadding="0" cellspacing="0" style="display:inline;">
                                <tr>
                                    <td height="28px"><div id="ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport_ctl05_ctl04_ctl00" style="font-family:Verdana;font-size:8pt;border:1px transparent Solid;">
                                        <table id="ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport_ctl05_ctl04_ctl00_Button" title="Export" border="0">
                                            <tr>
                                                <td><a id="ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport_ctl05_ctl04_ctl00_ButtonLink" title="Export" alt="Export" href="javascript:void(0)" style="text-decoration:none;"><img id="ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport_ctl05_ctl04_ctl00_ButtonImg" src="/Reserved.ReportViewerWebControl.axd?OpType=Resource&amp;Version=11.0.3010.3&amp;Name=Microsoft.Reporting.WebForms.Icons.ExportDisabled.gif" alt="Export" style="border-style:None;height:16px;width:16px;border-width:0px;" /><span style="width:5px;text-decoration:none;"> </span><img id="ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport_ctl05_ctl04_ctl00_ButtonImgDown" src="/Reserved.ReportViewerWebControl.axd?OpType=Resource&amp;Version=11.0.3010.3&amp;Name=Microsoft.Reporting.WebForms.Icons.ArrowDownDisabled.gif" alt="Export" style="border-style:None;height:6px;width:7px;border-width:0px;margin-bottom:5px;" /></a></td>
                                            </tr>
                                        </table>
                                    </div><div id="ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport_ctl05_ctl04_ctl00_Menu" style="background-color:#ECE9D8;border:1px #336699 Solid;display:none;position:absolute;padding:1px;z-index:1;">
                                        <div style="border:1px transparent Solid;">
                                            <a title="Excel" alt="Excel" onclick="$find('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport').exportReport('EXCELOPENXML');" href="javascript:void(0)" style="color:#3366CC;font-family:Verdana;font-size:8pt;padding:3px 8px 3px 8px;display:block;white-space:nowrap;text-decoration:none;">Excel</a>
                                        </div><div style="border:1px transparent Solid;">
                                            <a title="PDF" alt="PDF" onclick="$find('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport').exportReport('PDF');" href="javascript:void(0)" style="color:#3366CC;font-family:Verdana;font-size:8pt;padding:3px 8px 3px 8px;display:block;white-space:nowrap;text-decoration:none;">PDF</a>
                                        </div><div style="border:1px transparent Solid;">
                                            <a title="Word" alt="Word" onclick="$find('ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport').exportReport('WORDOPENXML');" href="javascript:void(0)" style="color:#3366CC;font-family:Verdana;font-size:8pt;padding:3px 8px 3px 8px;display:block;white-space:nowrap;text-decoration:none;">Word</a>
                                        </div>
                                    </div></td>
                                </tr>
                            </table>

I interact with the ID "ctl00_PlaceHolderMain_TestControl1_CertificateSearchControl_CertificateBundleReport_ctl05_ctl04_ctl00_Button" to get the menu to drop down, but selecting either "Export to PDF" or "Export to Excel" are challenging me a bit. Any suggestion to solves this would be greately appreciated.

Community
  • 1
  • 1
Klitgaard
  • 35
  • 1
  • 5
  • 1
    What does the function `confirmOnTransfer()` look like? – Tim Williams Mar 06 '15 at 21:18
  • Hi Tim, I have updated the question section with the ConfirmOnTransfer function. I see you helped the guy in the previous topic on this subject and I hope that you may be able to help me solve this. – Klitgaard Mar 08 '15 at 10:45

1 Answers1

1

You can try something like this:

  Dim el, f

  Set HTMLDoc = ie.document
  Set el =HTMLDoc.getElementById("ctl00_PlaceHolderMain_TestControl1_" & _ 
                                 "CertificateSearchControl_cmdTransfer")

  f = el.onclick

  f = Replace(f, "return confirmOnTransfer();", "")

  el.onclick = f

  el.click

Part 2 (4/1/2015):

  Dim el2
  'get the div containing the menu options
  Set el2 = HTMLDoc.getElementById( _
                "ctl00_PlaceHolderMain_TestControl1_Certificate" & _
               "SearchControl_CertificateBundleReport_ctl05_ctl04_ctl00_Menu")

  'click one of the contained links in that div
  el2.getElementsByTagName("a")(1)
Tim Williams
  • 154,628
  • 8
  • 97
  • 125
  • I forgot to thank you for this answer, it is greately appreciated. I worked perfectly. I have one more riddle which I hope you can help me solve. I am extracting a report from the same page and but another java script is giving me a headache. When I click the save icon on the webpage, a dropdown with two items appear. I can get my VBA script to click the initial save button but selecting one of the two options seems like an impossible task. I have updated the code in the question section, which this additional question. – Klitgaard Apr 01 '15 at 06:54
  • Perfrect, I got it to work with some slight tweaking, since it should interact with el.getElementsByTagName("a")(0) instead. I really appreciate the help Tim. – Klitgaard Apr 15 '15 at 07:42
  • @TimWilliams What to do when the script is in external `.js` file? – Zameer Ansari Jan 18 '16 at 15:16
  • @student - that shouldn't make any difference – Tim Williams Jan 18 '16 at 15:59
  • @TimWilliams I mean in [such cases](https://jsfiddle.net/xameeramir/7yt2gddn/). I tried your trick but no gain :( – Zameer Ansari Jan 18 '16 at 17:32
  • 1
    Then it might be appropriate to ask a new question and include all the relevant details... – Tim Williams Jan 18 '16 at 18:36
  • 1
    Looking at your linked example - the button has no `id` attribute, so `getElementById()` is not applicable here. – Tim Williams Jan 18 '16 at 18:40
  • @TimWilliams Oops!! I have updated the fiddle to include `id` attribute. I'll ping after asking the question and when you're online. – Zameer Ansari Jan 19 '16 at 08:54