前提・実現したいこと
Googleapps scriptで簡単なコードを書いているのですが、スクリプト冒頭のシートを取得してアクティブセルの列の位置を取得する時に毎回必ずエラーが出て困っています。ただしスクリプト自体は想定した結果を返しているので最後まで走っているようです。
発生している問題・エラーメッセージ
スクリプトはSpreadsheetのセルの値の変更をトリガーにしています。
スクリプトが走るたびに以下のメッセージがメールで送られてきます。
Google Apps Script CheckSheet のエラーの概要
エラー メッセージ トリガー
範囲外のセル参照です(行 8、ファイル「Memo」) change
var SpreadSheet = SpreadsheetApp.getActiveSpreadsheet(); var Sheet = SpreadSheet.getActiveSheet(); var CellColumn = Sheet.getActiveCell().getColumn();//←この行が行8 ```Googleapps script
試したこと
一応teratailの過去の質問も調べたのですが、「範囲外のセル参照です」はrangeのsortの時にエラーとして出てくるという事象が見つかりましたが、私の場合はメソッドを動かす前から取得の段階でエラーが出ています。
それとも実はもっと下流の行でエラーが出ていて行 8はGoogleapps scriptのシステムの誤認なのでしょうか?
補足情報(FW/ツールのバージョンなど)
コメント下さった方ありがとうございます。
すいません、後出しになってしまいましたが該当の行8だけでは解決しそうにないのでスクリプト全文を公開させていただきます。
このスクリプトをスプレッドシートの値の変更をトリガーにして走らせているので、ご指摘頂いているようなActiveCellが取得できていない可能性は低いと考えております。(例えば時刻で起動するようなトリガーでActiveCellが取得できない可能性はありますが、このスクリプトの場合は現にセルの編集を行った時に走っていますしアウトプットであるNoteへの書き込みもできています。)
本日気付いたのですが、このスクリプトは11~19行で定義してあるようにCheck listというタブ上でしか動かないようにしていますが、実際は他のタブ上でも動いていてログを調べるとRangeCheck = undefinedでも21行から始まるif文が走っているようです。
このあたりに何か構造的な問題があるのでしょうか?よろしくお願いします。
function MemoAsLog() {
//Active
var SpreadSheet = SpreadsheetApp.getActiveSpreadsheet();
var Sheet = SpreadSheet.getActiveSheet();
var SheetName = Sheet.getSheetName();
var CellColumn = Sheet.getActiveCell().getColumn();
var CellRow = Sheet.getActiveCell().getRow();
if(SheetName=="Check list" && CellColumn==9){
var RangeCheck = 1
}
if(SheetName=="Check list" && CellColumn!=9){
RangeCheck = 2
}
if(SheetName=="Check list" && CellColumn==8){
RangeCheck = 3
}
if(RangeCheck == 1||3){
var MyDate = new Date();
var ToDay = Utilities.formatDate(MyDate,'Asia/Tokyo', "yyyy/MM/dd");
var UserID = Session.getActiveUser().getEmail();
var User = UserID.split("@");
var ExistingNote = Sheet.getActiveCell().getNote();
var CellValue = Sheet.getActiveCell().getValue();
Sheet.getActiveCell().clearNote();
if(!ExistingNote){
Sheet.getActiveCell().setNote(ToDay+""+User[0]+""+CellValue);
}
else{
Sheet.getActiveCell().setNote(ExistingNote+"\n"+ToDay+""+User[0]+""+CellValue);
}
}
if(RangeCheck == 2){
Sheet.getActiveCell().clearNote();
if(!ExistingNote){
Sheet.getActiveCell().setNote(ToDay+""+User[0]);
}
else{
Sheet.getActiveCell().setNote(ExistingNote+"\n"+ToDay+""+User[0]);
}
}
}
回答2件
あなたの回答
tips
プレビュー