1

データを表示およびフィルタリングするために必要なマスターシートがあります。=Sheet2!B7データは、構文を使用してシートに取り込まれます。

問題は、元のコピーを更新しないマスターシートのデータを誤って編集し続けることです。

マスターシートにいる場合に警告を発し、セルの編集を停止するスクリプトが必要です。それでもデータをフィルタリングできるようにしたいので、シートをロックするだけで機能します。

このスクリプト(Yuzhyによる投稿)を変更しようとしていますが、これまでのところ、スクリプトを機能させることができませんでした。

(これがこの質問に適切な場所であるかどうかはわかりません。これまたはstackexchange /スーパーユーザーのいずれかでした。間違っている場合はアドバイスしてください。)

function onEdit(event){
 var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = SpreadsheetApp.getActiveSheet();
  var CellRow = SpreadsheetApp.getActiveRange().getRow();
  var CellColumn = SpreadsheetApp.getActiveRange().getColumn();

  if (CellColumn == 2){
    sheet.getRange(CellRow, CellColumn).setFormula("=A"+CellRow+"+1");
    Browser.msgBox("DON'T MESS WITH THE FORMULAS!");
  }
}

どんな助けでも大歓迎です。

4

2 に答える 2

2

コードを読んだところ、説明したこととは異なることをしようとしているようです。数式を「修復」しようとしているようです。しかし、なぜif (CellColumn == 2 )ですか?B「マスター」シート全体ではなく、列のみを保護したいですか?

シート構造がどのように見えるかのサンプルスプレッドシートを共有できますか?

とにかく、「マスター」シートの何かを上書きするときに警告したいと思います。数式の自動修復はもう少し複雑です(シナリオによって異なります)。ポップアップを読んだ後は、元に戻すだけで簡単にできます。そしてそれを回復します。ただし、実際には数式を自動修復することを意味します。スプレッドシートのサンプルを共有した後、コードを拡張します。これは、少し複雑で、構造に大きく依存するためです。

function onEdit() {
  var s = SpreadsheetApp.getActiveSheet();
  if( s.getName() == "Master" )
    Browser.msgBox("DON'T MESS WITH THE FORMULAS!");
}

他のシートで単純な参照数式を実行している場合は、ArrayFormulaを使用する方がやや簡単で、おそらく良い解決策です。最初のセルを除いて、セルを変更すると値が自動的に置き換えられますが、その後は手動で行われます。元に戻すことは非常にまれで明白なので、問題にはならないと思います。リンクしたスプレッドシートで配列数式の例を作成しました。ご覧ください。私が書いた上A1で:

=ArrayFormula(Sheet1!A1:F20)

B2これで、たとえば行って誤って何かを書き込んだ場合、その値は自動的に返されます。それがあなたにとって良い解決策であるかどうか試してみてください。

于 2012-07-11T14:53:10.513 に答える
0

更新-8/8/12の時点で、Googleはスプレッドシートを更新し、「保護された範囲」を使用できるようになりました-https://support.google.com/docs/bin/answer.py?hl=en&answer= 63175

于 2012-08-08T08:53:02.480 に答える