在另一个工作表中记录“RTD”值的变化

马特威尔逊

我在为此寻找答案时遇到了一些问题。

在 Sheet1 中,我有一系列单元格(“A4:Q4”),它们都具有某些 RTD 函数,它们从外部程序收集实时股票数据。这些单元格每隔几秒钟更新一次,具体取决于父程序的更改。

我想要做的是,每次该范围内的任何值发生变化时(即每次 RTD 值更新时),复制该范围的值并将它们粘贴到 Sheet2 中的下一个可用空行。这应该有效地创建一长串值,但是我遇到了 RTD 问题。我当前的代码将执行我想要的操作,但前提是手动更改范围内的值,而不是在 RTD 值更新时。即使 RTD 值正在更新/更改,它也不会将这些新值复制到 Sheet2,如果这有意义的话。这似乎与宏没有意识到值正在自动更改有关。当我对该范围内的值进行自己的更改时,它会起作用,但这会使单元格中的 RTD 函数变得无用。

这是我所拥有的:

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim KeyCells As Range

    ' The variable KeyCells contains the cells that will
    ' cause an alert when they are changed.
    Set KeyCells = Worksheets("Sheet1").Range("A4:Q4")

    ' Wait for change to happen...
    If Not Application.Intersect(KeyCells, Range(Target.Address)) _
           Is Nothing Then


    ' once change happens, copy the range (yes keep R4 value too)
    ThisWorkbook.Worksheets("Sheet1").Range("A4:R4").Copy

    ' Paste it into the next empty row of Sheet2
    With ThisWorkbook.Worksheets("Sheet2")
        Dim NextRow As Range
        Set NextRow = ThisWorkbook.Worksheets("Sheet2").Range("A" & .UsedRange.Rows.Count + 1)
        NextRow.PasteSpecial Paste:=xlValues, Transpose:=False

        Application.CutCopyMode = False

    End With

End If
End Sub

我在想一个潜在的解决方案是创建一个循环,通过它存储该范围内的每个值,然后每半秒或 1 秒将存储的值与“当前”值进行比较,看看是否有任何变化. 如果有,将该范围的值复制到 Sheet2。但这似乎很笨拙。

有任何想法吗?谢谢!

大本钟

如评论中所述,当单元格由于公式重新计算而更改值时,不会触发 Worksheet.Change 事件。所以你可以使用 Worksheet.Calculate 事件。

与 Worksheet.Change 事件不同,Worksheet.Calculate 事件中没有Target您可以使用以下方法测试特定范围内的单元格是否已重新计算:


  1. ThisWorkbook代码模块中:

    Private Sub Workbook_Open()
        PopulateKeyValueArray
    End Sub
    
  2. Sheet1代码模块中:

    Private Sub Worksheet_Calculate()
    
        On Error GoTo SafeExit
        Application.EnableEvents = False
    
        Dim keyCells As Range
        Set keyCells = Me.Range("A4:Q4")
    
        Dim i As Long
        For i = 1 To UBound(KeyValues, 2)
            If keyCells(, i).Value <> keyValues(1, i) Then
    
                Dim lastRow As Long
                With Sheet2
                    lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
                    .Range("A" & lastRow & ":R" & lastRow).Value =   Me.Range("A4:R4").Value
                End With
    
                Exit For
            End If
        Next i
    
    SafeExit:
        PopulateKeyValueArray
        Application.EnableEvents = True
    End Sub
    
  3. 在普通代码模块中:

    Public keyValues()
    
    Public Sub PopulateKeyValueArray()
        keyValues = Sheet1.Range("A4:Q4").Value
    End Sub
    

(1):keyValues是一个Public数组,其中填充keyCells了工作簿首次打开时的

(2):当任何单元格因公式重新计算而发生变化时Sheet1,将中的值keyCells与其对应的元素进行一一比较keyValues如果存在差异,即单元格 inkeyCells已更新,则 inA4:R4的最新值将写入in中的下一个可用行Sheet2Exit For保证这个值传递只发生一次,即使多个细胞发生了变化。最后,keyValues更新为 中的最新值keyCells

(3):PopulateKeyValueArray从读取值Sheet1:Range("A4:Q4")keyValues阵列。

请注意,keyValues当您第一次将代码添加到工作簿时它将为空,因此要么保存并重新打开,要么运行PopulateKeyValueArray以填充数组。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据另一个表中的记录值将记录插入表中

来自分类Dev

根据另一个表中记录的值将记录插入表中

来自分类Dev

如何自动从另一个工作表中多次插入一个值?

来自分类Dev

在另一个工作表中列出表中的所有唯一值

来自分类Dev

Excel:使用一个工作表中的值取消隐藏另一个工作表中的行

来自分类Dev

从另一个表更新表中的记录

来自分类Dev

根据其值引用另一个工作表中的另一个单元格

来自分类Dev

根据其值引用另一个工作表中的另一个单元格

来自分类Dev

从另一个工作表求和多个值

来自分类Dev

根据另一个表(部门)中的值从一个表(产品)中提取记录

来自分类Dev

根据另一个表的“相似”值从一个表中检索记录

来自分类Dev

比较值并将相应的值粘贴到另一个工作表中

来自分类Dev

查找不在另一个表中的记录

来自分类Dev

如何更新另一个表中的记录

来自分类Dev

在另一个表中查找丢失的记录

来自分类Dev

MS Access:将当前记录中的值插入另一个表

来自分类Dev

从一个表中查找在另一个表的关联记录中没有特定字段值的记录的记录

来自分类Dev

根据另一个工作表的值引用另一个工作表的单元格

来自分类Dev

用另一个工作表中的动态值填充ComboBox

来自分类Dev

Google脚本:将列中的新值附加到另一个工作表

来自分类Dev

Excel-如何从另一个工作表中检索相应的值?

来自分类Dev

VBA循环将值粘贴到另一个工作表中

来自分类Dev

在另一个工作表中搜索列值

来自分类Dev

VBA 复制范围值并粘贴到另一个工作表中

来自分类Dev

从另一个工作表上的特定单元格中搜索值

来自分类Dev

在另一个工作表中显示结果

来自分类Dev

删除另一个工作表中的整行

来自分类Dev

在Excel中添加另一个工作表

来自分类Dev

从一个工作表中另一个范围内的指定范围中查找值

Related 相关文章

  1. 1

    根据另一个表中的记录值将记录插入表中

  2. 2

    根据另一个表中记录的值将记录插入表中

  3. 3

    如何自动从另一个工作表中多次插入一个值?

  4. 4

    在另一个工作表中列出表中的所有唯一值

  5. 5

    Excel:使用一个工作表中的值取消隐藏另一个工作表中的行

  6. 6

    从另一个表更新表中的记录

  7. 7

    根据其值引用另一个工作表中的另一个单元格

  8. 8

    根据其值引用另一个工作表中的另一个单元格

  9. 9

    从另一个工作表求和多个值

  10. 10

    根据另一个表(部门)中的值从一个表(产品)中提取记录

  11. 11

    根据另一个表的“相似”值从一个表中检索记录

  12. 12

    比较值并将相应的值粘贴到另一个工作表中

  13. 13

    查找不在另一个表中的记录

  14. 14

    如何更新另一个表中的记录

  15. 15

    在另一个表中查找丢失的记录

  16. 16

    MS Access:将当前记录中的值插入另一个表

  17. 17

    从一个表中查找在另一个表的关联记录中没有特定字段值的记录的记录

  18. 18

    根据另一个工作表的值引用另一个工作表的单元格

  19. 19

    用另一个工作表中的动态值填充ComboBox

  20. 20

    Google脚本:将列中的新值附加到另一个工作表

  21. 21

    Excel-如何从另一个工作表中检索相应的值?

  22. 22

    VBA循环将值粘贴到另一个工作表中

  23. 23

    在另一个工作表中搜索列值

  24. 24

    VBA 复制范围值并粘贴到另一个工作表中

  25. 25

    从另一个工作表上的特定单元格中搜索值

  26. 26

    在另一个工作表中显示结果

  27. 27

    删除另一个工作表中的整行

  28. 28

    在Excel中添加另一个工作表

  29. 29

    从一个工作表中另一个范围内的指定范围中查找值

热门标签

归档