【问题标题】:Need to calculate data faster需要更快地计算数据
【发布时间】:2017-04-12 18:39:00
【问题描述】:

我正在为这段代码苦苦挣扎,请帮助我。我想在工作表中记录更改,这段代码可以做到这一点,但它会逐个单元格地进行,这使得它变慢了。我的活动工作表运行时间为 200 毫秒,这在此代码更改其作业值时非常快。有什么方法可以同时显示值而不是转到每个单元格。如果我的要求没有任何意义,请原谅我。

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

结束子

【问题讨论】:

  • 使用数组在内存中做所有事情会比直接在工作表上进行所有更改要快。另外,请注意工作表上的每个Change 都会触发另一个change event。因此,您编写的子程序一遍又一遍地(递归地)调用自己。在工作表上进行这些更改时,您应该关闭事件。另一点:字典oData 在哪里填充?请将此部分包含在上述代码 sn-p 中。

标签: excel worksheet-function worksheet vba


【解决方案1】:

您是否尝试过关闭屏幕更新?将此行添加到您的子行下方,看看这是否有助于提高速度。

Application.ScreenUpdating = False

【讨论】:

    猜你喜欢
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    • 2018-09-13
    • 2022-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多