我正在尝试在Google表格上创建一个脚本,以便在B10单元格的值增加时收到消息提醒。像这样:
Static oldVal As Variant
oldVal = Me.Range("B10").Value
If Me.Range("B10").Value > oldVal Then
Browser.msgBox('hello world');
End If
有办法吗?
答案 0 :(得分:0)
除了你的语法之外(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")
}
}
如果单元格在指定的工作表或范围内不,则不会发生任何事情。
观察公式单元格稍微复杂一点,但它会起作用。 Apps脚本中有两种方法。 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 event objects的更多信息。