如果根据公式为负数,则弹出框

Popup box if a negative number based from formula

我正在尝试找出一个脚本,如果 F 列中的数字变为负数,该脚本将弹出一个框。我想我可能 运行 遇到了一个问题,因为负数是从公式中生成的,而不是有人手动输入的。这是我一直在使用的脚本:

function onEdit(event){
  var sheet = event.source.getActiveSheet().getName()
  var editedCell = event.range.getSheet().getActiveCell();
  if(sheet=="Numbers"){
     if(editedCell.getColumn() == 6 && event.value==-0.1){   
        Browser.msgBox('It looks like there is a negative number in Column F.');
  }}}

我认为这可能与'editedcell'功能有关,但我不是100%。有谁知道更好的脚本即使公式生成负数也会弹出一个框(F 列中的值将是一个可能生成负数的公式)?

此时,除非我在 F 列中手动键入“-1”或其他一些负数,否则此代码不会发生任何事情。

答案:

事件对象 returns 您编辑的单元格范围,而不是脚本或公式编辑的单元格范围。除此之外,您还可以采取一些措施来修复或优化您的代码。

代码修复:

首先,您可以更改条件以优化脚本,并且仅在需要时才进行调用 - 我使用略有不同的条件顺序完成了此操作。

除此之外,您需要明确指定 F 列的值而不是 event.range.getSheet().getActiveCell(),并使用 getDisplayValues() 函数,因为如果单元格包含公式:

function onEdit(event) {
  var sheet = event.source.getActiveSheet();
  if (sheet.getName() != "Numbers") {
    return;
  }

  var values = sheet.getRange('F:F').getDisplayValues()
  
  for (var i = 0; i < values.length; i++) {
    if (values[i] < 0) {
      Browser.msgBox('It looks like there is a negative number in Column F.');
      return;
    }
  }  
}

参考文献: