我有一个用VBA编写的功能,可以完成我想要的功能(见下文。注意:我自己没有写这个功能)
我想要的是一个函数,比如说,“= LastModifiedDateOf(CELL)”,其中CELL是一个参数,表示我想监视的单元格。如果此类单元格的值发生变化,则包含该函数的单元格的值将更新为当前日期。
最终我想要一个用google sheet编写的函数做同样的事情,但我真的不明白这个函数是如何工作的。
任何人都可以做其中一个或两个:1)解释下面函数中发生的事情,2)在googlescripts(js)中编写一个执行相同操作的函数?
Public Function Lastmodified(c As Range)
Lastmodified = Now()
End Function
答案 0 :(得分:1)
1)解释功能中发生的事情
只有当参考内容发生变化时,才会重新计算电子表格单元格内容。当你仔细考虑它时,这对效率是有意义的:当没有参考值(也就是参数)发生变化时,计算单元格的新值会浪费计算机资源......我们' d只是以相同的值结束。
您提供的VBA功能的神奇之处在于,只有在引用的单元格发生更改时,才会重新计算包含它的单元格。这是在电子表格的控制之下,完全独立于脚本本身。
Google表格中显示了相同的行为。在这两种情况下,对于函数来说,监控单元的功能并不重要 - 函数只是在调用它时返回当前时间,应该有时是单元格&#39 ; s值的变化。
但是,还有其他原因可以调用该函数。在Excel中,您可以手动触发电子表格重新计算,这将使用当前时间更新此函数在电子表格中出现的任何位置的输出。同样,在Google表格中,只要您加载电子表格,就可以触发重新计算。
2)在执行相同操作的googlescripts(js)中编写一个函数
/**
* Return the time that the referenced cell or range was last changed.
* Initial use shows current time.
*
* @param {Sheet3!B32} reference Cell or range to monitor.
* @returns The time the reference was last changed.
* @customfunction
*/
function lastModified( reference ) {
// Surprise - we don't actually care what has changed!
return( new Date() );
}
答案 1 :(得分:0)
在此片段中,如果修改了A1单元格,则单元格A2将自动更新为修改日期。
function onEdit(e) {
if (e.range.getA1Notation() === "A1") {
e.source.getRange("A2").setValue(new Date());
}
}