Один из основных принципов программирования - DRY (не повторяйте себя). У вас есть три функции, которые отличаются только используемыми строковыми значениями, что означает, что все они могут быть легко объединены в одну функцию. Поскольку вы сказали, что первая функция не вызывает проблем, вероятно, их объединение устранит вашу ошибку и создаст более качественный код.
В приведенном ниже примере кода обратите внимание, что строки, которые не меняются, находятся за пределами оператор if/then
.
function onEdit(e) {
// Set strings and corresponding values
let values = ["COMPLETED FAB","FINISHED","COMPLETED SURVEYS"];
let states = ["Fabrication Completed", "Service Completed", "Fabrication"];
var sheet = e.range.getSheet();
if (e.value === values[0]) {
if (sheet.getSheetName() == 'Fabrication') {
logSheet = e.source.getSheetByName(sates[0]);
}
} else if (e.value === values[1]) {
if (sheet1.getSheetName() == 'Service') {
logSheet1 = e.source.getSheetByName(states[1]);
}
} else if (e.value === values[2]) {
if (sheet2.getSheetName() == 'Survey') {
logSheet2 = e.source.getSheetByName(states[2]);
}
} else {
// No valid input
return false;
}
var row = e.range.getRow();
var lastRow = logSheet.getLastRow();
var range = sheet.getRange(row, 1, 1, sheet.getLastColumn());
range.copyTo(logSheet.getRange(lastRow + 1, 1));
sheet.deleteRow(row);
}