尝试使用Excel VBA {ke

时间:2017-12-22 15:37:52

标签: jquery excel-vba internet-explorer kendo-grid kendo-dropdown

我试图在公司内部网页的下拉列表中选择一个项目。我可以设置文本输入项目并打开下拉列表,但我可以很难搞清楚如何做出选择

在其他区域,我可以使用ID和td / tr标签进行选择,但是这个例程没有任何带有条目名称的tr / td标签。

这是我迄今为止尝试过的几件事:

这两个项目执行相同的功能,可以正常打开第一个下拉列表

ie.Document.getElementById("FromDistrict").Click
ie.Document.parentWindow.execScript "$('#FromDistrict').kendoDropDownList('open');"

我尝试了以下几种变体:

  ie.Document.parentWindow.execScript "$('#FromDistrict').data('kendoGrid').dataItem($('transport').data('kendoDropDownList').select('KILGORE'));"
  ie.Document.parentWindow.execScript "$('#FromDistrict').data('kendoGrid').data('kendoDropDownList').select('KILGORE'));"
  ie.Document.parentWindow.execScript "$('#FromDistrict').data('kendoGrid').data('kendoDropDownList').select('eq:0'));"
  ie.Document.parentWindow.execScript "$('#FromDistrict').data('kendoDropDownList').select('KILGORE'));"
  ie.Document.parentWindow.execScript "$('#FromDistrict').select('KILGORE'));"

查看此特定细分的源代码为:

</div>
<form action="/TransferLoad/Add" method="post"><input name="__RequestVerificationToken"  _ 
type="hidden" value="IP80d5XM-Qi0XQ1-IgGKGmhLVNGdtDAyM-r7lJ6yQCI1RIdJJph0uPnz-DzEHx12_booO4xwvcWg6EUWPiLnHv7ww6PD-aqfhiVxPcy-VYm6mnBRHsba3H7Hembliybo0" />  _ 
  <div class="k-block k-info-colored">
    <div class="k-header">
        <span>Add Transfer Load Details</span>
    </div>
    <div class="k-content">
        <div class="infocontainer">
            <table>
                <tr>
                    <td class="columnLabel">
                        <label for="From_District:">From District:</label>
                    </td>
                    <td class="columnData">
                        <input id="FromDistrict" name="FromDistrict" style="width: 200px" type="text" />
 <script>
  jQuery(function(){jQuery("#FromDistrict").kendoDropDownList({"dataSource" _ 
 :{"transport":{"read": {"url":"/DistrictProfiles/GetUserDistricts","data": _ 
 function() { return kendo.ui.DropDownList.requestData(jQuery("#FromDistrict"));  }}, _ 
 "prefix":""}, "serverFiltering":true,"filter":[],"error":OnError, _ 
 "schema": {"errors":"Errors"}},  "dataTextField":"DistrictName","autoBind":true, _ 
 "dataValueField":"DistrictCode", "optionLabel":"Select District..."});});
</script>
                    </td>
                    <td class="columnLabel">    'Next dropdown section starts here
                        <label for="To_District:">To District:</label>
                    </td>

当下拉列表打开时,它有2个项目可供选择,但代码中没有任何地方可以找到列出的这两个项目,因此我假设他们已从这一行中撤出: { {1}} ,但我不确定。 有人可以指出我在这里失踪了吗?

我没有发布&#34;视图元素&#34;因为复制它很困难。所有选择都会动态更改其他选择选项。

2 个答案:

答案 0 :(得分:1)

在浏览器DOM浏览器(显示标记&#39;计算/清理&#39;由渲染引擎)中,您应该看到

<input id="FromDistrict" name="FromDistrict" style="width: 200px" type="text" />

已更改为包含datalist属性。例如

<input id="FromDistrict" name="FromDistrict" style="width: 200px" type="text" datalist="DistrictName" />

.....并且在DOM中,你应该看到由Kendo代码注入DOM的datalist元素。

<datalist id="DistrictName">
<option value="Kent">Kent</option>
<option value="Surry">Surry</option>
</datalist>

您应该能够自动化该字段,只需将有效的逗号分隔列表分配给FromDistrict。

例如。 FromDistrict.value =&#39; Kent,Surry&#39 ;;

答案 1 :(得分:0)

通过使用以下内容,我能够以粗俗的方式完成我想要的工作,但我正在以更有效的方式开展工作。

'Choose the FROM district
ie.Document.parentWindow.execScript "$('#FromDistrict').kendoDropDownList('open');"
Dim FrDist, li
Set FrDist = ie.Document.getElementById("FromDistrict-list").getElementsByTagName("li")
    Dim fd
    fd = 0
    For Each li In FrDist
        'MsgBox ("li.innertext is -   " & li.innerText & " fd value is: " & fd)
        If li.innerText Like "*KILGORE*" Then
           FrDist(fd).Click
         Else
         'Do Nothing
       End If
        fd = fd + 1
        'Application.Wait (Now + TimeValue("0:00:02"))
    Next

Application.Wait (Now + TimeValue("0:00:02"))

'Choose the TO district
ie.Document.parentWindow.execScript "$('#ToDistrict').kendoDropDownList('open');"
Dim ToDist
Set ToDist = ie.Document.getElementById("ToDistrict-list").getElementsByTagName("li")
    Dim tod
    tod = 0
    For Each li In ToDist
        'MsgBox ("li.innertext is -   " & li.innerText & " tod value is: " & tod)
        If li.innerText Like "*KILGORE*" Then
           ToDist(tod).Click
         Else
            'Do Nothing
       End If
        tod = tod + 1

    Next