如果数据发生变化,如何只显示新的变化? [英] If data changes, how to show only new changes?
本文介绍了如果数据发生变化,如何只显示新的变化?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
您好!
在该函数的帮助下,会加载动态数据列中不断(每分钟)自动更改的数据。此数据一次在所有行中更新。 我的任务: 如果B7的值自上次更改后发生了更改,则我们在单元格C7中显示";name:Delta";。如果不是,则将单元格C7留空。该文件几乎没有示例。 link to excel file in googlesheets 我使用EXCEL加法处理动态数据 此VBA将用于下面的其余行。
这样的行很多(600多行)。 遗憾的是,我的代码只适用于一行,它不接受通过函数进行的更改(因为数据是通过函数从第三方应用程序传递的)
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("A6")) Is Nothing Then
If Range("A6").Value = Dynamic_data Then
Range("B6").Value = ""
Else
Dynamic_data = Range("A6").Value
Range("B6").Value = "Delta"
End If
End If
End Sub
推荐答案
使用Worksheet_Change
可以,但它在更新期间甚至可能触发600次。另一个困难是,在工作表更改后,您无法知道以前的值,因此需要将这些值存储在其他地方。它可以是隐藏的工作表,也可以是实际工作表上的不可见列(隐藏或位于最右侧的某个位置)。另一个困难可能是第一次和最后一次更新之间可能存在时间差距,因此如果您需要在下一次更新之前显示Delta,则需要费心处理时间戳,这将使处理变得更加复杂。因此,我建议使用一个不同的概念:使用Worksheet_Change
设置标志来指示数据列中发生了什么(该标志可以设置600次,这是没有问题的)。定期运行更新进程,并在设置该标志时执行必要的更新。更新过程的计时将在更新显示时引入一些延迟,但您可以根据外部数据更新的行为进行调整。
假设您的数据在A列,增量显示在B列,之前的值显示在列BB:
将此代码放入Sheet1:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not UpdateStarted Then
UpdateRequired = True
UpdateProc ' launch update sub
End If
If Target.Count > 1 Then Exit Sub
If Target.Column <> 1 Then Exit Sub ' changes in column A are processed only
UpdateRequired = True
End Sub
将此代码转换为代码模块(例如模1):
Option Explicit
Public UpdateRequired As Boolean
Public UpdateStarted As Boolean
Public Sub UpdateProc()
Dim rData As Range
Dim v As Variant
Dim t10sec As Double
t10sec = TimeValue("0:0:10")
Application.OnTime Now + t10sec, "UpdateProc" ' restart
UpdateStarted = True
If Not UpdateRequired Then Exit Sub
Application.EnableEvents = False
Set rData = Range("A6:A700")
For Each v In rData
If v.Value = Cells(v.Row, "BB") Then ' compare to saved value
Cells(v.Row, 2).Value = vbNullString ' clear Delta for unchanged values
Else
Cells(v.Row, "BB") = v.Value ' save changed value
Cells(v.Row, "B") = "Delta"
End If
Next
Application.EnableEvents = True
UpdateRequired = False
End Sub
备注:
您不需要启动UpdateProc。Worksheet_Change
将从Sheet1上的第一个更改开始。
UpdateProc将重新计划为每10秒运行一次。
这篇关于如果数据发生变化,如何只显示新的变化?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文