I organize my students to take the test by giving each student a Google form. To set the time to accept and reject responses for all forms, I used a trigger with a loop like this:
function stopFormRespones() {
var ss = SpreadsheetApp.getActive();
for (var l = 2; l <= ss.getSheetByName('listStudent').getLastRow(); l++) {
var link = ss.getSheetByName('listStudent').getRange('N' + l).getValue();
var form = FormApp.openByUrl(link);
form.setAcceptingResponses(false);
}
}
function openFormRespones() {
var ss = SpreadsheetApp.getActive();
for (var l = 2; l <= ss.getSheetByName('listStudent').getLastRow(); l++) {
var link = ss.getSheetByName('listStudent').getRange('N' + l).getValue();
var form = FormApp.openByUrl(link);
form.setAcceptingResponses(true);
}
}
function scheduledCollection() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var start = ss.getSheetByName('title').getRange('F12').getValue();
var end = ss.getSheetByName('title').getRange('F14').getValue();
var t = new Date();
if (t > start & t < end) {
openFormRespones();
} else {
stopFormRespones();
}
}
function StartStop() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var start = ss.getSheetByName('title').getRange('F12').getValue();
var end = ss.getSheetByName('title').getRange('F14').getValue();
var limit = ScriptApp.newTrigger('scheduledCollection')
.forSpreadsheet(ss)
.onChange()
.create();
}
However, if the number of forms is large (more than 50 forms), the trigger seems to have an error. It does not execute on time as set. I think the cause is because the loop runs out of time allowed. How can I fire the forms at once (without using loops)? Looking forward to your help.