Как отобразить «Browser.msgBox» при увеличении значения ячейки? - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь создать скрипт в Google Sheets, чтобы получать оповещения при каждом увеличении значения ячейки B10. Примерно так:

 Static oldVal As Variant
 oldVal = Me.Range("B10").Value
 If Me.Range("B10").Value > oldVal Then
Browser.msgBox('hello world');
End If

Есть способ?

1 Ответ

0 голосов
/ 03 мая 2018

Кроме того, что ваш синтаксис выключен (Apps Script основан на JavaScript), да, вы можете сделать это, используя несколько различных механизмов.

Используйте простой триггер onEdit(e) для просмотра листа.

Объект e имеет клавиши oldValue и value, которые можно сравнивать напрямую. Вы также можете проверить на специфическую ссылку на ячейку, используя параметр range. Следующие тесты для ячейки B10, а именно:

function onEdit(e) {
  if (e.range.getA1Notation() == 'B10' && e.value > e.oldValue) {
    Browser.msgBox("you increased the value")
  }
}

Если взять еще больше, вы можете указать лист в электронной таблице для проверки перед запуском сценария.

function onEdit(e) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  if (e.range.getA1Notation() == 'B10' && e.range.getSheet().getName() == 'Página1' && e.value > e.oldValue) {
    Browser.msgBox("you increased the value")
  }
}

Если ячейка не в указанном листе или диапазоне, ничего не происходит.

Просмотр ячейки формулы немного сложнее, но она будет работать. В скрипте приложений есть два метода. getValue() возвращает значение , отображаемое в ячейке , даже если оно рассчитывается по формуле. .getFormula() получает расчетную формулу ячейки . Так что, да, это будет работать с простым вызовом .getValue() в диапазоне.

Основное различие заключается в том, что вы должны следить за ячейкой формулы, поскольку она не редактируется пользователем напрямую. Другими словами, объект события не будет срабатывать, если значение ячейки вычисляется по формуле. В том числе это просто:

function onEdit(e) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var formulaRange = e.range.getSheet().getRange("B4");

  if (e.range.getA1Notation() == 'B10' || formulaRange && (e.range.getSheet().getName() == 'Página1' && e.value > e.oldValue) {
    Browser.msgBox("you increased the value")
  }
}

Подробнее о Объекты событий Apps Script в документации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...