はじめに
Google Apps Scriptでスプレッドシートのプログラムを書いてると、こんな事起こりませんか?
「エラーが出たと思ったら、アクティブにしてるシートが違った・・・」
これはあるあるだと思うので、今回はそれを防止するプログラムを作る。
そもそも「アクティブなシート」って?

この場合は**「見積書」と言うシートがアクティブと言うことになる。**
今開いているスプレッドシート内で、どのシートを開いているか?
これが分かれば、利用者にとても優しいプログラムを書けそうですね。
例えば、こちらを見て欲しい。
Google Apps Script 見積書からデータを転記し、指定フォルダに請求書を作成(スプレッドシート)
上記の記事で紹介してるコードの場合、「見積書」と言うシートがアクティブでないと、エラーが出る。なぜなら、取得する値がないからだ!
「見積書」と言うシートにはG18のセルに値が存在したしても、それ以外のシートではG18のセルに値が存在しないかもしれない。結果、もしアクティブになってるシートが「見積書」以外のシートだった場合、値が存在しないのでエラーが出る。
関数を特定のシート以外で実行したら、アラートを出す
// Spreadsheetが開かれた時に自動的に実行されます.
function onOpen() {
// 現在開いている、スプレッドシートを取得します.
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
// メニュー項目を定義します.
var entries = [
{name : "請求書を生成" , functionName : "menuItem1"},
{name : "PDF化する" , functionName : "menuItem2"},
];
// 「Custom」という名前でメニューに追加します.
spreadsheet.addMenu("Custom", entries);
}
// menuItem1をクリックした時の処理
function menuItem1() {
//現在のスプレッドシートを取得
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = SpreadsheetApp.getActiveSheet();
//見積書以外で実行したらアラート
var nowSheet = sheet.getSheetName();
if (nowSheet === '見積書') {
Logger.log('見積書がアクティブです');
} else {
menuItem1Alert();
}
}
function menuItem1Alert() {
var ui = SpreadsheetApp.getUi();
var title = '見積書で実行してね!';
var text = 'じゃないと失敗するの・・・'
ui.alert(title, text, ui.ButtonSet.OK_CANCEL);
}