Google Apps Script 関数を特定のシート以外で実行したら、アラートを出す


はじめに

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