2017-04-03 59 views
3

作为this问题的后续问题,每当通过单元格范围的公式更改单元格时,我需要在相邻单元格中添加时间戳。通过公式(Excel)更改较大单元格区域中的单元格时的时间戳

我知道这意味着构建一个数组来存储以前的值到下面的代码(它实现了相同的,但只为一个单元格),并会感谢任何帮助实现这一点。

下面是单个电池的工作原理代码...

在Sheet1中单元格A1,把这个公式

=Sheet2!A1+1 

现在在模块粘贴此代码

Public PrevVal As Variant 

粘贴这在纸张代码区域

Private Sub Worksheet_Calculate() 
    If Range("A1").Value <> PrevVal Then 
     Range("B1").Value = Format(Now, "dd/mm/yyyy hh:mm:ss") 
     PrevVal = Range("A1").Value 
    End If 
End Sub 

而且最后放在ThisWorkbook代码区粘贴此代码

Private Sub Workbook_Open() 
    PrevVal = Sheet1.Range("A1").Value 
End Sub 
+0

相反,可以使用worksheet_change事件来检测片材(数据的任何范围)的变化和理智行变更在加时间戳。您可以使用Target.row来识别已更改的行。 – ArindamD

+3

@ArindamD,Worksheet_Change未检测到公式更改 – CallumDA

+2

在两个位置都更改为'PrevVal = application.sum(Range(“A1:A9”)。Value)“。然后,如果A1:A9中的任何值发生变化,则所有值的总和都会改变。 – Jeeped

回答

2

你可以保持在Dictionary以前的值,而不是一个数组。要使用字典,你需要添加一个引用到微软脚本运行时库

(工具>参考> Microsoft脚本运行时库)


标准模块

Public PrevVal As Dictionary 

ThisWorkbook模块

Private Sub Workbook_Open() 
    Dim r As Range 
    Set PrevVal = New Dictionary 
    For Each r In Worksheets("Sheet1").Range("A1:A10") 
     PrevVal.Add Item:=r.Value, Key:=r.Address 
    Next r 
End Sub 

表模块

Private Sub Worksheet_Calculate() 
    Dim v As Variant 

    For Each v In PrevVal.Keys() 
     If Range(v).Value <> PrevVal(v) Then 
      Range(v).Offset(0, 1).Value = Format(Now, "dd/mm/yyyy hh:mm:ss") 
      PrevVal(v) = Range(v).Value 
     End If 
    Next v 
End Sub 
+0

很好的答案 - 你需要'删除'然后'添加'吗? –

+0

@RobinMackenzie谢谢 - 我实际上无法测试这段代码,因为我在Mac上工作。我有一个快速的目光,看看你是否可以改变一个字典中的项目的价值,因为它的密钥并没有提供任何东西。仍然看着:) – CallumDA

+1

覆盖键的项目值应该是足够的。 – Jeeped

相关问题