Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 每个单元格更改的多个时间戳_Excel_Vba_Timestamp - Fatal编程技术网

Excel 每个单元格更改的多个时间戳

Excel 每个单元格更改的多个时间戳,excel,vba,timestamp,Excel,Vba,Timestamp,我正在尝试修改此处提到的代码: 基本上,我不希望为同一行的五个不同列上的每个单元格插入新的时间戳更改,而是希望使用分号delimeter将每个新的时间戳(附加新值)添加到一列中字符串的开头,动态更改列中的每个单元格每减少0.01。时间戳的添加将是无限的 例如,如果A1从5.01更改为5.00,B1将包含5.00-新时间戳;(以前的值和时间戳) 我只希望捕获A列中的值减少时的更改。因此,如果A2从6.53变为6.54,则不捕获任何内容,但如果A2从6.54直接变为6.51,则为B2添加三个新的时

我正在尝试修改此处提到的代码:

基本上,我不希望为同一行的五个不同列上的每个单元格插入新的时间戳更改,而是希望使用分号delimeter将每个新的时间戳(附加新值)添加到一列中字符串的开头,动态更改列中的每个单元格每减少0.01。时间戳的添加将是无限的

例如,如果A1从5.01更改为5.00,B1将包含5.00-新时间戳;(以前的值和时间戳)

我只希望捕获A列中的值减少时的更改。因此,如果A2从6.53变为6.54,则不捕获任何内容,但如果A2从6.54直接变为6.51,则为B2添加三个新的时间戳:


6.53-新的时间戳;6.52-新的时间戳;6.51-新的时间戳;(以前的值和时间戳)

请尝试下一个代码:


    Private Sub Worksheet_Calculate() 'variant
     Static dictSt As New Dictionary
       'reset the dictionary by putting the string "Reset" in range "C1" and pressing Enter
       Dim lastRow As Long
       lastRow = Range("A" & Rows.count).End(xlUp).Row
       If Range("C1") = "Reset" Then
           Application.EnableEvents = False
            Range("D1").ClearContents
            Range("B2:B" & lastRow).ClearContents
           Application.EnableEvents = True
            dictSt.RemoveAll
            Exit Sub
       End If
       
       'processing_____________________________________________________
       Dim rng As Range, Target As Range, dif As Double, i As Long
       Dim dblIncrement As Double
    
       Set rng = Range("A2:A" & lastRow)
       
       Application.EnableEvents = False
       For Each Target In rng
         If Not dictSt.Exists(Target.Address) Then
            dictSt.Add Target.Address, Array(Target.Value & "-" & Format(Now(), "hh:mm:ss"), Target.Value)
            Target.Offset(0, 1).Value = dictSt(Target.Address)(0)
         Else
             Debug.Print dictSt(Target.Address)(1)
             If Target.Value < CDbl(dictSt(Target.Address)(1)) Then
                    'set records of 0.01 increments:
                    dif = dictSt(Target.Address)(1) - Target.Value
                    dblIncrement = Round(dif / 0.01, 0): ' How many 0.01 increments to be used
                    For i = 1 To dblIncrement
                         dictSt(Target.Address) = Array(dictSt(Target.Address)(1) _
                                 - 0.01 & "-" & Format(Now(), "hh:mm:ss") & ";" & dictSt(Target.Address)(0), dictSt(Target.Address)(1) - 0.01)
                    Next i
                    Target.Offset(0, 1).Value = dictSt(Target.Address)(0) 'fill the dict key value
                Else
                    dictSt(Target.Address) = Array(dictSt(Target.Address)(0), Target.Value)
                End If
         End If
       Next
       Application.EnableEvents = True
    End Sub


专用子工作表_Calculate()'变量
静态dictSt作为新词典
'通过将字符串“reset”置于范围“C1”并按Enter键来重置字典
最后一排一样长
lastRow=范围(“A”和Rows.count).End(xlUp).Row
如果范围(“C1”)=“重置”,则
Application.EnableEvents=False
范围(“D1”).ClearContents
范围(“B2:B”和最后一行)。ClearContents
Application.EnableEvents=True
RemoveAll主旨
出口接头
如果结束
“处理_____________________________________________________
变暗rng为射程,目标为射程,dif为双精度,i为长
Dim DBL增量为双精度
设置rng=范围(“A2:A”和最后一行)
Application.EnableEvents=False
对于rng中的每个目标
如果目录不存在(目标地址),则
dictSt.addtarget.Address,数组(Target.Value&“-”和Format(Now(),“hh:mm:ss”),Target.Value)
Target.Offset(0,1).Value=dictSt(Target.Address)(0)
其他的
调试打印命令(目标地址)(1)
如果Target.Value

你可能会做一些测试。要为工作环境重置使用过的字典,必须在“C1”中写入“重置”,然后按
Enter
。如果“C1”不方便,代码可以很容易地调整为使用任何其他单元格或任何其他字符串(可能更短)来重置……

注释不用于扩展讨论;已添加此对话。添加了一个新代码,该代码为所有增加的会话创建时间戳(在C:C列中)。我理解/推断你会喜欢这样的行为。。。如果不需要它,您可以注释或删除从
开始的行,如果Target.Offset(0,2).Value=“”,则
…前面的代码具有正确的值,但每个值只有一个时间戳。这段代码修复了时间戳问题,但现在值有点偏离。基本上,一旦发生更改,字符串的第一个加法是正确的,因为它从初始值减去.1。但是随后的字符串加法不会继续减法。相反,对于给定的时间戳,剩余值都是相同的。此值似乎是新值-.10。@michael:请尝试给我一个可复制的示例,该示例的行为与您的需要不同。h2的初始值为5.3,i2的初始值为7。将h2改为5。B2生成11.9-17:08:38;11.9-17:08:38;12.2-17:08:38;12.3-17:07:33. 这应该是12-17:08:38;12.1-17:08:38;12.2-17:08:38;12.3-17:07:33