0

I've searched through the forums a few times and I wasn't able to suss out an answer to my issue.

I'm using Google Sheets to track project progress for my team. I currently have 5 users, each with their own tab, plus three additional tabs that are intended to be dynamic though fairly hands-off for any user except myself.

In order to make this tracker easy to use, I've implemented an onEdit script to move any project that's marked "completed" from the user's tab over to the "completed" tab automatically.

The script worked fine the first few times I tested it out, but now I'm encountering this error:

TypeError: Cannot read property "source" from undefined. (line 7)

I'm not entirely sure why the script is unable to find the source, so I'm not sure what I need to fix in my code.

function onEdit(event) {
  // assumes source data in sheets named Laura, Jedsen, Erin, Tim, Hunter
  // target sheet of move to named Completed
  // test column with completed is col 11 or K
  // must create new script when adding in a new writer
  var ss = SpreadsheetApp.getActiveSheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();

  if(s.getName() == "Laura" && r.getColumn() == 11 && r.getValue() == "Completed") {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Completed");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
  }
  if(s.getName() == "Jedsen" && r.getColumn() == 11 && r.getValue() == "Completed") {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Completed");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
  }
   if(s.getName() == "Erin" && r.getColumn() == 11 && r.getValue() == "Completed") {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Completed");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
  }
   if(s.getName() == "Hunter" && r.getColumn() == 11 && r.getValue() == "Completed") {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Completed");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
  }
   if(s.getName() == "Tim" && r.getColumn() == 11 && r.getValue() == "Completed") {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Completed");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
  }
}
Rubén
  • 34,714
  • 9
  • 70
  • 166

3 Answers3

2

Looks that you are running the function from the Script Editor. In this case, event is undefined. To learn about how to test a trigger function see How can I test a trigger function in GAS?

Community
  • 1
  • 1
Rubén
  • 34,714
  • 9
  • 70
  • 166
0

I encountered some similar exception in my app script but in my case, there was a silly mistake, I forgot passing variable reference while calling the method

function validate(name) {
  if (!codeConstants[name]) {
    Logger.log('Error:' + name);
  }
}

function init(name) {
  if (!validate())
    return;

  // some code....
}

My validate method call had a trouble it should be changed to

if (!validate(name))

Soman Dubey
  • 3,798
  • 4
  • 22
  • 32
-1

I think this will work for you,

var ss = SpreadsheetApp.getActiveSheet();
var s = ss.getActiveSheet();
var r = s.getActiveRange();

Let me know if it is working OR not.