2017-12-07 1 views
0

私はプログラマーではありませんが、スクリプトを一緒に飾ってしまい、最後の部分を動かすことができません。私は、ログにactivelogは文字列を渡すと、それは私が見渡せるんだ単純な構文の問題だように感じるようにしたい:セル値に応じてgetSheetbyNameを設定する

var activelog = e.source.getSheetByName("SHEET1").getRange("A1").getValue(); 
var log = e.source.getSheetByName(activelog); 

activelogはは、関連するすべてのシートのリストが含まれてSheet1のドロップダウンメニューのセルA1の値を取得します。スクリプトは、Sheet1のB1に何かが入力されている場合、選択されたシートのC列の数式をコピーします。今のシート名を指定して「LOGは、」正常に動作します:

function onEdit(e) { 
    var activelog = e.source.getSheetByName("SHEET1").getRange("A1").getValue(); 
    var log = e.source.getSheetByName("LOG"); 
    var lr = log.getLastRow(); 
    var fdr = log.getRange(1,23,lr); 
    var formula = ""; 

    if (e.source.getActiveSheet().getName() !== "SHEET1" || e.range.rowStart != 1 || e.range.columnStart != 2) return 
    log.getRange("C1").setFormula(formula);log.getRange("C1").copyTo(fdr); 
} 
+1

B1は、ONとOFFの式を切り替えドロップダウンメニューであり、それはまた包み、新しい行がシートに追加された式をダウン充填トリガー。 – diggy

答えて

1

最初の式を設定せずにlog.getRange("C1").copyTo(fdr);ある場合var lr = log.getLastRow()0を返します。そして、log.getRange(1,23,lr)getRange(1,23,0)にしようとすると、無効な範囲であるためエラーになります。

log.getLastRow() || 1;を追加して、シートが空の場合は、~を設定します。

function onEdit(e) { 
    var activelog = e.source.getSheetByName("SHEET1").getRange("A1").getValue(); 
    var log = e.source.getSheetByName(activelog); 

    // If getLastRow() returns 0, set 1 
    var lr = log.getLastRow() || 1; 
    var fdr = log.getRange(1,23,lr); 

    var formula = "=SUM(1+2)"; // for testing 

    if (e.source.getActiveSheet().getName() !== "SHEET1" || e.range.rowStart != 1 || e.range.columnStart != 2) return 
    log.getRange("C1").setFormula(formula);log.getRange("C1").copyTo(fdr); 
} 
+0

ありがとう、それはトリックでした。白紙でテストしていました。 – diggy

0

あなたが最後の行に帰国後;が欠落しています。 今範囲が正しくありません、それはあなたの条件、それはreturn log.getRange("C1").setFormula(formula);

を行うに入り、それがあれば入力しなかった場合、それがない、すべてのシートが空の場合

関連する問題