【问题标题】:VBA - IE - Click one button to make another 'Input Enabled'VBA - IE - 单击一个按钮以使另一个“启用输入”
【发布时间】:2019-12-09 23:51:49
【问题描述】:

我正在用 VBA 编写一个连接到以下网站的宏: https://sphere.ush.inbcu.com/index.html#/(可能无法登录)。

有两个元素: 左侧有一个下拉菜单 - 右侧有一个文本框。

如果用户没有从下拉菜单中选择任何内容 - 无法在文本框中输入任何内容。 用户需要从下拉菜单中选择一个项目 - 然后可以将输入放在文本框中。

我已经编写了一个从下拉菜单中选择一个项目的代码 - 但是当宏执行此操作时 - 右侧的文本框仍然是“灰色”,无法在此处写入任何输入。 当用户手动单击下拉菜单并选择一个项目时 - 文本框不是灰色的,可以在那里提供输入。

我尝试了各种方法。我检查了这两个元素并尝试设置它们的属性,例如:

element.setAttribute("disable") = ""
element.setAttribute("autocomplete") = "on"
element.setAttribute("aria-expanded") = "true"

我注意到,当允许文本框在内部提供输入时,这些属性应该具有这些属性。 当文本框为“灰色”且无法提供输入时,它们的属性为:“禁用”、“关闭”、“假”。 但是 - 什么都没有改变,通过宏设置这些属性 - 不会改变任何东西。

下拉菜单的 HTML 代码: '<select class="form-control input-sm ng-pristine ng-valid ng-empty ng-touched" ng-change="Tile.clearResults()" ng-model="Tile.searchData.searchBy" ng-options="item as item for item in Tile.searchBy"><option value="string:Deal" label="Deal">Deal</option><option value="string:Deal/Order" label="Deal/Order">Deal/Order</option><option disabled="" selected="selected" value="">Search By</option><option value="string:Department System Number" label="Department System Number">Department System Number</option><option value="string:Invoice/Statement #" label="Invoice/Statement #">Invoice/Statement #</option></select>'

'<option value="string:Deal" label="Deal">Deal</option>
<option value="string:Deal/Order" label="Deal/Order">Deal/Order</option>
<option disabled="" selected="selected" value="">Search By</option>

'

文本框的 HTML 代码:

'

<option disabled="" selected="selected" value="">Search By</option>
<input disabled="disabled" class="ui-select-search input-xs ng-pristine ng-untouched ng-valid ng-empty" role="combobox" aria-expanded="false" style="width: 482px;" spellcheck="false" aria-label="Select box" ondrop="return false;" type="search" placeholder="Enter Search Criteria..." ng-class="{'spinner': $select.refreshing}" ng-click="$select.activate()" ng-model="$select.search" ng-disabled="$select.disabled" autocapitalize="off" autocorrect="off" autocomplete="off">

'

您能否建议我应该更改哪个属性以使文本框允许将输入放入其中?

谢谢,

【问题讨论】:

  • 出于测试目的,尝试使用开发者工具打开代码,手动尝试移除disabled属性,查看是否开启启用。还尝试删除其他 ng disabled 属性。尝试改变课程。它看起来像一个 Angular 应用程序,很难通过 VBA 实现自动化。
  • 嘿迪帕克。我已经检查了您要求的所有内容 - 删除了 ng disabled 属性,替换了类 - 但是这些都没有奏效。您能否告知这是否可以通过 VBA 实现自动化?您只需要从下拉菜单中选择项目并用鼠标单击它 - 然后另一个文本框“打开”。
  • 正如您已经在做的那样,您可以轻松更改下拉值,但在这里看起来角度代码具有启用该输入的一些逻辑。这是无法通过 VBA 访问的。如果它是任何简单的 JS 函数,我们可以从 VBA 触发它,但这里不是这样。
  • 嘿迪帕克,谢谢你的回答。所以无法通过 VBA 激活使用 Angular 框架编程的元素?
  • 嘿迪帕克!经过这么长时间我终于想出了一个解决方案:ie.Document.parentWindow.execScript "angular.element.getElementsByClassName(">我把类名放在这里.='Value' " 并且它起作用了! :-)

标签: javascript html vba internet-explorer browser-automation


【解决方案1】:

ie.Document.parentWindow.execScript "angular.element.getElementsByClassName(">我把类名放在这里

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多