Vba Excel 2013中的工作表更改要慢得多

Vba Excel 2013中的工作表更改要慢得多,vba,excel,excel-2013,Vba,Excel,Excel 2013,我有一个简单的sub,它位于工作表代码中: Public current_plot As Integer Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = Range("plot").Address Then save_data (current_plot) restore_data (Target.Value) current_plot = Ta

我有一个简单的sub,它位于工作表代码中:

Public current_plot As Integer
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = Range("plot").Address Then
        save_data (current_plot)
        restore_data (Target.Value)
        current_plot = Target.Value
    End If
End Sub
“绘图”范围为单个单元格

当我在Excel2007上运行这个程序时,它只需要几分之一秒,而在Excel2013中大约需要10秒

以下是我所知道的(Excel 2013):

  • 当我从另一个子系统调用
    save_data
    restore_data
    时,不是在
    工作表\u Change
    中,它工作得非常快
  • 当我调用
    Worksheet\u Change
    而不调用
    save\u data
    restore\u data
    时,它的工作速度也很快(尽管它几乎什么都不做…)
  • 运行Excel 2013的计算机比使用Excel 2007的计算机具有更强大的硬件
  • save_data
    restore_data
    非常简单,不应超过一秒钟(在Excel 2007中确实不需要)
  • 我在网上搜索,发现其他人抱怨类似的问题,并尝试了所有的建议(主要是关闭动画和其他图形加速),但没有任何帮助


    你知道我能做什么吗?

    你有没有尝试过用Application.EnableEvents=False禁用事件,然后在用Application.EnableEvents=True结束Sub之前再次启用它?由于您正在更改代码中的单元格内容,我怀疑更改事件被多次触发。检查这一点的另一种方法是,在IF语句上插入断点,并用F8手动调试代码,以查看更改事件代码是否被触发了多次。“save_data和restore_data相当简单,不应超过一秒钟”-您也会这样说您发布的代码,现在我们来看一下(加上前面的三个观察结果,所有这些都指向您没有发布的代码,因为它可能是问题所在)除非你已经做了一些计时来表明慢度只存在于你发布的代码中,否则你可能还没有告诉我们全部情况。@TimWilliams,我当然计时了代码!我在
    工作表\u Change
    之外测试了这些函数,它们工作得非常快。只有当我从
    工作表\u Change
    调用它们时,它才会变得非常慢。参见ullet 1以上。@sktneer谢谢!看起来你解决了它。虽然我不明白为什么它只在Excel 2013上出现问题,而在Excel 2007中它工作顺利。这是我的观点-我指的是从
    工作表\u Change