如果数据发生变化,如何只显示新的变化? [英] If data changes, how to show only new changes?

查看:0
本文介绍了如果数据发生变化,如何只显示新的变化?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

​您好!

在该函数的帮助下,会加载动态数据列中不断(每分钟)自动更改的数据。此数据一次在所有行中更新。

​​我的任务: 如果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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆