【问题标题】:Worksheet_Change doesn't fire up when streaming live data流式传输实时数据时 Worksheet_Change 不会启动
【发布时间】:2021-11-20 22:26:56
【问题描述】:

我已经阅读了很多关于这个主题的帖子,但是似乎没有什么适合我的场景

我想在单元格更改 (B2) 时 Call Sub 包含来自外部源的实时数据馈送 -last updated:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Target.Worksheet.Range("B2")) Is Nothing Then
        Call SubName
    End If
End Sub

我浏览了许多帖子,建议检查Äpplication.EnableEvents = True,或者创建函数来检测更改(这确实有效,但是我不能在函数内调用 sub) - 没有成功。

Interestnigly enough, when I click on B2 and press enter - it executes the sub

谢谢

【问题讨论】:

  • 代码看起来正确。您是否将代码保存在要触发的工作表的工作表对象中?如果你只是把它保存在一个模块中,它是行不通的。
  • 为什么需要If Not Intersect(Target, Target.Worksheet.Range("B2")) Is Nothing Then,就用If Not Intersect(Target, Range("B2")) Is Nothing Then
  • 感谢您的回复 - 是的,代码在我正在使用的工作表中。有趣的是,当我点击 B2 并按 Enter 键时,它会执行 sub。
  • 实时数据馈送是否真的改变了单元格的内容,或者它只是以某种方式显示某些东西(例如图像),使它看起来像是在改变? (我什至不确定这种情况是否可行,但数据馈送显然有一些东西奇怪。)尝试将单元格 C2(或某处)设置为 =B2 并查看它是否已更新. (如有必要,您可以使用 Change 事件来检测 C2 的变化。)
  • 谢谢@YowE3K - 我确信数据正在正确更新,我也尝试过使用额外的单元格......

标签: vba excel worksheet


【解决方案1】:

说单元格 A1 通过流式更新。更新也不会触发:

  • Worksheet_SelectionChange
  • Worksheet_Change

你需要做的是在某处建立一个方程:

=A1

当A1刷新时,公式单元格会重新计算,你可以通过Calculate Event检测它。

【讨论】:

  • 啊——当然是Calculate 事件!这也适用于 OP 的单元格 B2,因为它也只是一个公式。
  • 这并不完全正确,因为 OP 没有说明“流式传输”的含义。如果单元格 A1 的值属性发生更改,则会触发 Worksheet_Change 事件(例如 COM 写入 Excel)。如果用户选择另一个单元格,它将触发 Worksheet_SelectionChange 事件。如果单元格 A1 是一个公式并且公式重新计算,则 Worksheet_Calculate 将触发(例如 DDE,或从另一个工作表重新计算)。此外,可能是用户正在监视错误的工作表以捕获“真实”流式传输事件。
  • @user3357963 你的 cmets 很有用...使用 Calculate 的好处是我从来不知道它会失败...使用 Calculate 是由于其他原因计算工作表时获得错误触发器的机会。
【解决方案2】:

你可以去

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$B$2" Then SubName
End Sub

【讨论】:

  • @YowE3K,是的,我错了 Range 对象的 Worksheet 属性。我实际上从未使用过它,并且总是使用Parent 属性。我编辑了代码。谢谢
  • 不幸的是,这个也不起作用。让我困惑的是,当我点击 B2 并按 Enter 时,它按预期工作(调用 sub)
  • 简单解释-它连接到外部源,每隔几秒刷新一次并更改值
  • 好的,我发现 B2 有一个公式可以从不同的工作表 B2=AnotherSheet!F3 中提取数据。有什么建议吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-06
相关资源
最近更新 更多