我有一个我正在使用的excel报告,它插入了多个SQL表,因此我有一个命令按钮,它运行一个刷新所有表的宏。我正在尝试向该宏添加一些代码,这些代码将创建上次刷新表时的时间戳。
这是我到目前为止所拥有的:
Sub Button1_Click()
ThisWorkbook.RefreshAll
Range("I17").Formula = "=Now()"
End Sub
这就是我想要的,但问题是我的报告有很多其他单元格不断更新工作表,这反过来导致时间戳单元格(I17)不断刷新。
我该怎么做才能使NOW()函数“锁定”到那个时间并且不会刷新,除非我特意点击我的宏按钮?
答案 0 :(得分:2)
每次重新计算时,公式都会重新评估其结果,按照定义。如果不是这样的话,Excel将毫无用处。
您想要的不是公式,而是值。
因此,不要使用Excel的NOW()
函数,而是使用VBA的DateTime.Now
属性来指定单元格的值:
ActiveSheet.Range("I17").Value = VBA.DateTime.Now
所有内容都被隐含地限定,它只有:
[I17] = Now
我鼓励你找到一个中间立场 - 隐式引用是一个非常常见的错误来源。这样的东西似乎是可以接受的,只要你在隐藏 Now
属性的范围内没有VBA.DateTime
变量,常量,过程或模块:
ActiveSheet.Range("I17") = Now
上述说明明确限定Range
调用活动工作表,隐式使用Range
对象的默认属性(Value
),并隐含地限定来自Now
标准库模块的VBA.DateTime
属性。