单元格

时间:2015-07-06 16:35:06

标签: javascript excel vba google-apps-script

我有一个用VBA编写的功能,可以完成我想要的功能(见下文。注意:我自己没有写这个功能)

我想要的是一个函数,比如说,“= LastModifiedDateOf(CELL)”,其中CELL是一个参数,表示我想监视的单元格。如果此类单元格的值发生变化,则包含该函数的单元格的值将更新为当前日期。

最终我想要一个用google sheet编写的函数做同样的事情,但我真的不明白这个函数是如何工作的。

任何人都可以做其中一个或两个:1)解释下面函数中发生的事情,2)在googlescripts(js)中编写一个执行相同操作的函数?

Public Function Lastmodified(c As Range)

Lastmodified = Now()

End Function

2 个答案:

答案 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() );
}

screenshot

答案 1 :(得分:0)

在此片段中,如果修改了A1单元格,则单元格A2将自动更新为修改日期。

function onEdit(e) {

  if (e.range.getA1Notation() === "A1") {
    e.source.getRange("A2").setValue(new Date());
  }

}
相关问题