【发布时间】:2021-02-27 06:21:09
【问题描述】:
我进行了一些广泛的研究,但无法解决我的问题。我有一个 Excel 工作簿,我不断地从 OPC 服务器中提取一个值。该值存储在一组行中。每当我手动引入数据时,这都很有效,但是当单元格自动更新时,它就不起作用了。
Private Sub Worksheet_Change(ByVal target As Range)
'MsgBox = Target.Address
If Not Application.Intersect(Range("B1:B2"), Range(target.Address)) Is Nothing Then
Call CopyDataToRecord
End If
End Sub
Sub CopyDataToRecord()
Dim IndexI As Integer
Dim IndexY As Integer
Dim IndexMius As Integer
Dim DufferLength As Integer
DufferLength = 20
IndexY = DufferLength + 5
'Shift Data
For IndexI = i To DufferLength
IndexYMius = IndexY - 1
Cells(IndexY, 1) = Cells(IndexYMius, 1)
Cells(IndexY, 2) = Cells(IndexYMius, 2)
IndexY = IndexYMius
Next IndexI
'Copy The Latest Data
Range("A2:B2").Copy Range("A5:B5")
End Sub
【问题讨论】:
-
你把代码放在工作表对象里了吗?还是你不小心把它放到了一个模块中?
-
没有触发事件过程的原因只有 3 个。 (1) 程序格式错误。您发布的看起来很完美,但最好让 VBA 为您创建它。 (2)
Application.EnableEvents = False。重新启动 Excel 会将属性设置为 True。 (3) 事件发生但未被识别。这是因为该过程不在工作表的代码模块中,正如@braX 所建议的那样。将其移至该代码模块。 -
通过公式更新单元格时不会触发 Change 事件。如果您遇到这种情况,您需要更改为计算事件,或在 VBA 中使用 OnTime 安排更新。两者都很好地涵盖了 SO