【发布时间】:2019-06-07 15:17:57
【问题描述】:
我一直在尝试使用 VBA 将我在网站上执行的流程自动化,但我对 JavaScript 的了解有限。我已经问过这方面的问题,但还没有解决方案。
我需要做的是回答一系列类似这样的 Y/N 问题,例如该问题还有两个相关的子问题。如果您在第一个中选择“是”,则会出现第二个,依此类推。问题是我无法让 VBA 触发该网站的所有事件,这意味着我可以对第二个问题回答“是”(第一个问题在我开始工作时总是已经手动回答)现在它不会显示第三个也是最后一个问题。
我查看了 JS 代码,并且随着我对它的深入挖掘,我不断发现东西。到目前为止,我从浏览器上的调试中知道,文档上有一个“mousedown”事件,该事件由显示选项 Y/N 的第二个答案元素名称触发,然后是另一个来自 div 元素的事件“更改”第二个问题段落。
关于 VBA 并尝试触发事件我已经尝试了很多东西..
.fireEvent“onchange”或“onclick”不起作用
.iedoc.parentWindow.execScript 和函数 eventHandle() 给出错误。
这是JS中的函数
elemData.handle = eventHandle = function() {
// Handle the second event of a trigger and when
// an event is called after a page has unloaded
return typeof jQuery !== "undefined" && !jQuery.event.triggered ?
jQuery.event.handle.apply( eventHandle.elem, arguments ) :
undefined;
};
这不会给出错误,但也没有任何反应:
Dim event_onChange As Object
Set event_onChange = ieDoc.createEvent("HTMLEvents")
While ieApp.Busy Or ieApp.readyState <> 4: DoEvents: Wend
ieDoc.querySelector("select[name='meetingQuestionAnswer(221010)']").Focus
event_onChange.initEvent "mousedown", True, False
ieDoc.querySelector("select[name='meetingQuestionAnswer(221010)']").dispatchEvent event_onChange
event_onChange.initEvent "change", True, False
ieDoc.querySelector("select.auto-save[name='meetingQuestionAnswer(221010)']").dispatchEvent event_onChange
ieDoc.querySelector("select.auto-save[name='meetingQuestionAnswer(221010)']").Value = "Yes"
事件应该从目标元素还是 currentTarget 元素分派?或者我如何触发事件以显示 Y/N 选项框并加载其他问题?
【问题讨论】:
-
您还可以通过使用 parentwindow.exescript 执行适当的 JavaScript 来触发事件
-
我收到错误 80020101,表示操作无法完成。我将添加处理问题更改的函数...我在某处读到 VBA 上的错误可能是因为该函数的 JS 中的代码具有 cmets...
-
有一个错字,应该是 execscript - 抱歉
-
您拥有网页/javascript 代码吗?或者你想驱动别人的界面?如果您有 javascript 技能,那么我绝对建议您编写一个 Chrome 扩展程序,medium.freecodecamp.org/… 在我发现 Chrome 扩展程序后不久就退出了使用 VBA 编写 IE 脚本。
-
@SMeaden 我们所做的所有工作都与 Excel 上的信息有关,所以我在 VBA 方面的经验比在 JavaScript 方面更有经验
标签: javascript jquery html vba jquery-events