Google apps script Google应用程序脚本中RequireRewaeInRange的参数不能为null

Google apps script Google应用程序脚本中RequireRewaeInRange的参数不能为null,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我有一个脚本,它在我的一些电子表格中工作得很好,但在其他电子表格中却失败了 代码如下: function depDrop_(range, sourceRange){ var rule = SpreadsheetApp.newDataValidation().requireValueInRange(sourceRange, true).build(); range.setDataValidation(rule); } function onEdit (){ var aCell = S

我有一个脚本,它在我的一些电子表格中工作得很好,但在其他电子表格中却失败了

代码如下:

function depDrop_(range, sourceRange){
  var rule = SpreadsheetApp.newDataValidation().requireValueInRange(sourceRange, true).build();
  range.setDataValidation(rule);
}

function onEdit (){
  var aCell = SpreadsheetApp.getActiveSheet().getActiveCell();
  var aColumn = aCell.getColumn();
  if (aColumn == 7 && SpreadsheetApp.getActiveSheet()){
    var range = SpreadsheetApp.getActiveSheet().getRange(aCell.getRow(), aColumn + 1);
    var sourceRange = SpreadsheetApp.getActiveSpreadsheet().getRangeByName(aCell.getValue());
    depDrop_(range, sourceRange);
  }
  else if (aColumn == 8 && SpreadsheetApp.getActiveSheet()){
    var range = SpreadsheetApp.getActiveSheet().getRange(aCell.getRow(), aColumn + 1);
    var sourceRange = SpreadsheetApp.getActiveSpreadsheet().getRangeByName(aCell.getValue());
    depDrop_(range, sourceRange);
  }
  else if (aColumn == 9 && SpreadsheetApp.getActiveSheet()){
    var range = SpreadsheetApp.getActiveSheet().getRange(aCell.getRow(), aColumn + 1);
    var sourceRange = SpreadsheetApp.getActiveSpreadsheet().getRangeByName(aCell.getValue());
    depDrop_(range, sourceRange);
  }
}
此脚本在我的一些电子表格中运行良好,但在其他电子表格中,它显示以下错误:

Argument cannot be null: range (line 2, file "Code")
有人能帮我解释一下吗?

想想这句台词

sourceRange = SpreadsheetApp.getActiveSpreadsheet().getRangeByName(aCell.getValue());
如果没有名称与
aCell
的内容匹配的命名范围,则sourceRange将为null,然后您将在尝试使用
requireRequireWainRange(sourceRange,true)
构建验证规则时出错。所以,在建立规则之前检查一下。还有其他一些小问题会使脚本变得混乱:

  • 在每个条件下检查
    &&SpreadsheetApp.getActiveSheet()
    ,都是毫无意义的。如果由于某种原因它是空的,那么在
    onEdit
    函数的第一行就会有一个错误。在任何情况下,调用
    onEdit
    触发器时,它都不会为null
  • 所有三个条件语句的内容都是相同的,因此它们可以组合在一起
这是我的版本,仅当sourceRange有效时才调用
depDrop\uuz

function onEdit (){
  var aCell = SpreadsheetApp.getActiveSheet().getActiveCell();
  var aColumn = aCell.getColumn();
  if (aColumn == 7 || aColumn == 8 || aColumn == 9) {
    var range = SpreadsheetApp.getActiveSheet().getRange(aCell.getRow(), aColumn + 1);
    if (range) {
      var sourceRange = SpreadsheetApp.getActiveSpreadsheet().getRangeByName(aCell.getValue());
      if (sourceRange) {
        depDrop_(range, sourceRange);
      }
    }
  }
}

感谢您的精彩解释,就脚本的功能而言,如果我在第7列选择某个值,将根据第7列上的值在第8列上自动创建一个下拉列表,在第9列上,下拉列表将取决于第8列的值。