I'm very new to all this. I'm trying to write a script that sorts sheets by descending date order each time a new row is entered. I need the script to run on all pages but the first (the summary page). I've gotten close (I can get the script to run on a specified page), but don't know how to
- exclude a page or
- have it start running the script on the second page.
Here's the code so far. It appears there is a TypeError in the line that reads, "var editedCell = shs.getActiveCell();"
function onEdit(event){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var shs = ss.getSheets(), num = shs.length;
var sheetName = []
for(var i = 1; i<num; i++);
var editedCell = shs.getActiveCell();
var columnToSortBy = 1;
var tableRange = "A2:G99"; // What to sort.
if(editedCell.getColumn() == columnToSortBy){
var range = sheet.getRange(tableRange);
range.sort( { column : columnToSortBy, ascending: false });
}
}
}
Best Answer
First, the error:
shs
is an array, since you populate it withss.getSheets()
, so it doesn't have a methodgetActiveCell()
. However, the elements of the array has that method.You are also referencing a variable
sheet
, which you haven't defined anywhere.Currently, your code is more suitable for going through a single sheet, you need to iterate through the
shs
array to have it operate on all sheets.The following function will go through all cells in all sheets:
But you wanted to skip the first sheet, so let's start with element
1
in the array (since the array is0
-based, element1
is the second sheet):As for your comment, your code
could work, if you replace
return
withcontinue
. You don't wantreturn
, it ends the script.continue
skips to the next element in thefor
loop.