0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Posted at

はじめに

Google Apps Scriptでスプレッドシートのプログラムを書いてると、こんな事起こりませんか?
「エラーが出たと思ったら、アクティブにしてるシートが違った・・・」

これはあるあるだと思うので、今回はそれを防止するプログラムを作る。

そもそも「アクティブなシート」って?

スクリーンショット 2020-05-19 13.46.47.jpg

この場合は**「見積書」と言うシートがアクティブと言うことになる。**

今開いているスプレッドシート内で、どのシートを開いているか?

これが分かれば、利用者にとても優しいプログラムを書けそうですね。
例えば、こちらを見て欲しい。:point_down:
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);
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?