<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 для запуска из ответа на предыдущий вопрос с событием «onchange» из JavaScript (см. Ссылку на вопрос об этом), но теперь код JavaScript, кажется, работает медленнее, чем макрос поэтому, когда мне нужно ответить на следующий вопрос с данными из Excel, макрос останавливается с ошибкой, говорящей о том, что объект не существует (потому что новый раскрывающийся список (мой объект) еще не появился). Если я отлаживаю, а затем вручную перехожу построчно, это дает время JavaScript для загрузки нового выпадающего списка, и все отлично работает.
событие onchange в JavaScript - список зависимых опций
Я пытался использовать функцию ожидания из VBA после запуска события, а также цикл с событиями do, но все равно он не работает.
Я также сделал цикл do, чтобы повторить действие, пока объект является ничем, но тоже не работал.
Это сценарий, связанный с тремя вопросами:
'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