Reputation: 1
I am working on this spreadsheet and I want it to move the entire row to a separate tab once it is marked as "complete" and if it is marked anything else while on that tab, I want it to move BACK to the original tab.
I've written a script and it works. However the only problem with it is that every single time I write anything on the sheet, everything shifts around. Is there any way to avoid this? I am going to be writing on the sheet constantly and I would like it to ONLY move things around when that specific cell that shows the status (pending, In progress, Complete") changes.
This is what i have written on the script for the Spreadsheet so far: `
function onEdit(event) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();
if(s.getName() == "Current Tasks" && r.getColumn() == 3 && r.getValue() == 'Complete') {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Archived Tasks");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
} else if(s.getName() == "Archived Tasks" && r.getColumn() == 3 && r.getValue() == 'In Progress', 'Pending') {
var row = r.getRow();
var numColumns = s.getLastColumn();
var targetSheet = ss.getSheetByName("Current Tasks");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(row, 1, 1, numColumns).moveTo(target);
s.deleteRow(row);
}
}
`
Upvotes: 0
Views: 51
Reputation: 10217
Maybe it's not it, but could you try changing your second if statement?:
else if(s.getName() == "Archived Tasks" && r.getColumn() == 3 && (r.getValue() == 'In Progress' || r.getValue() == 'Pending')){
Upvotes: 1