2017-07-10 12 views
0

私のスプレッドシートの一部ではうまく動作しますが、他のスクリプトでは失敗するこのスクリプトを使用しています。ここで引数Google AppsスクリプトでrequireValueInRangeのnullにすることはできません

は、コードは次のとおりです。

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") 

誰かが助けて、私にこれを説明することはできますか?

答えて

1

aCellの内容に一致する名前を持つ名前付き範囲が存在しない場合は、sourceRangeがnullになり、requireValueInRange(sourceRange, true)で検証ルールを構築しようとしたとき、あなたがエラーを取得しますライン

sourceRange = SpreadsheetApp.getActiveSpreadsheet().getRangeByName(aCell.getValue()); 

を考えてみましょう。したがって、ルールを作成する前にそれを確認してください。スクリプトを乱雑にする他の小さな問題があります。

  • 各条件で&& SpreadsheetApp.getActiveSheet()をチェックするのは無意味です。なんらかの理由でnullだった場合は、onEditの最初の行にエラーがあります。どんな場合でも、onEditトリガーが呼び出されたときにはnullになりません。
  • 3つの条件文はすべて同じ内容なので、組み合わせることができます。ここで

sourceRangeが有効である場合にのみ、depDrop_を呼び出し私のバージョン、次のとおりです。

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); 
     } 
    } 
    } 
} 
+0

は限り私はいくつかを選択した場合、それが何をするか、スクリプトの関数であるとして、その素晴らしい説明をありがとう列7の値に基づいて列8にドロップダウンが自動的に作成され、列9にドロップダウンは列8の値に依存します。 – user7254740

関連する問題