0
我正在努力与此代码请帮助我。我想记录这个代码所做的更改,但它逐个单元格,这使得它变慢。我的活动工作表运行时间为200ms,在代码执行其工作值更改时非常快。有没有什么方法可以同时显示值而不是通过每个单元格。如果我的请求甚至没有任何意义,请在我的脑海中充满混乱。需要快速计算数据
Private Sub Worksheet_Change(ByVal Target As Range)
Const Scope = "G9:H9,G11:H11,G13:H13,G15:H15,G17:H17,G19:H19,G21:H21,G23:H23,G25:H25,G27:H27,G29:H29,G31:H31,G33:H33,G35:H35,G37:H37,G39:H39,G41:H41,G43:H43,G45:H45,G47:H47,G49:H49,G51:H151,G53:H53,G55:H55,G57:H57,G59:H59,G61:H61,G63:H63,G65:H65,G67:H67" ' monitoring area
Static oData As New Dictionary
Dim rCells As Range
Dim oCell
Dim dDelta
Set rCells = Application.Intersect(Target, Target.Parent.Range(Scope))
If Not rCells Is Nothing Then
For Each oCell In rCells
With oCell
dDelta = oData(.Address)
.Offset(0, 1).Value = dDelta
oData(.Address) = .Value
End With
Next
End If
末次
使用数组在内存中执行所有操作会比在表单上直接进行每个更改要快。另外,请注意,表中的每个“更改”都会触发另一个“更改事件”。所以,你编码的子程序一遍又一遍地调用(递归)。在工作表上进行这些更改时,应关闭事件。另一点:字典“oData”在哪里被填充?请将这部分包含到上面的代码片段中。 – Ralph