如果根据公式为负数,则弹出框
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;
}
}
}
参考文献:
我正在尝试找出一个脚本,如果 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;
}
}
}