Vba Excel 2013中的工作表更改要慢得多
我有一个简单的sub,它位于工作表代码中: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
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
时,它的工作速度也很快(尽管它几乎什么都不做…)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