<script type="text/javascript">
var questionType = 'RQ_CHOICE';
var elementName="meetingQuestionAnswer(220674)";
if(questionType=="RQ_CHOICE" || questionType=="RQ_YES_NO" ){
$("select[name='" + elementName + "']").bind("change",function(event){
loadDependentQuestion("220674",'select');
});
}
if(questionType=="RQ_CHOICE_BULLET" || questionType=="RQ_RATING_SCALE"){
$("input:radio[name='" + elementName + "']").bind("change",function(event){
loadDependentQuestion("220674",'radio');
});
}
bindDelegateToloadDependentQuestion("220674");
</script>
在帮助下,我已经解决了从上一个问题的答案中触发依赖 dropboz 的问题,事件来自 JavaScript(请参阅有关此问题的链接),但现在 JavaScript 代码似乎运行得比宏慢因此,当我需要用 Excel 中的数据回答下一个问题时,宏会停止并出现错误,指出该对象不存在(因为新的下拉列表(我的对象)尚未出现)。如果我调试然后我手动逐行进行,那么它会为 JavaScript 提供时间来加载新的下拉列表,并且一切正常。
onchange event in JavaScript - dependent option list
我已经尝试在触发事件后使用 VBA 的等待函数以及带有 do 事件的循环,但它仍然不起作用。
我还做了一个 do 循环来重复这个 Action ,而对象什么也没有,但也没有工作。
这是与三个问题相关的脚本:
'First question
ieDoc.getElementsByName("question1")(0).Value = "Yes"
event_onChange.initEvent "change", True, False
ieDoc.getElementsByName("question1")(0).dispatchEvent event_onChange
While ieApp.Busy Or ieApp.readyState <> 4: DoEvents: Wend
application.wait "00:00:02"
'Second question - the one that is not loading
Do while ieDoc.getElementsByName("question2")(0) Is Nothing Then
For i = 1 To totalRng.Cells.count
If totalRng.Cells(i).Offset(, savingsRng.Column - Cells(i).Column) > 0 Then
On Error Resume Next
While ieApp.Busy Or ieApp.readyState <> 4: DoEvents: Wend
ieDoc.getElementsByName("question2")(0).Value = "Yes"
Exit For
Else
While ieApp.Busy Or ieApp.readyState <> 4: DoEvents: Wend
ieDoc.getElementsByName("question2")(0).Value = "No"
End If
Next i
Loop
最佳答案
看起来你想要一个循环直到出现并根据超时来避免潜在的无限循环。
Const MAX_WAIT_SEC As Long = 10
Dim t As Date, ele As Object
t = Timer
Do
On Error Resume Next
Set ele = ieDoc.querySelector("[name='meetingQuestionAnswer(221010)']")
On Error GoTo 0
If Timer - t > MAX_WAIT_SEC Then Exit Do
Loop While ieDoc.querySelectorAll("[name='meetingQuestionAnswer(221010)']").Length = 0
If Not ele Is Nothing Then
'do something
End If
关于javascript - HTML 事件加载速度比宏运行速度慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54143773/