Excel 365 vba-(取消保护)工作表会大大降低宏的运行速度

时间:2019-02-14 18:37:27

标签: excel vba office365 excel-2007

与Excel 2007相比,在Excel 365中使用VBA取消保护/保护工作表的速度要慢得多。是否有人对此有丝毫想法?并且有什么办法可以解决这个问题而不仅仅是忽略保护功能?

为确保该问题仅是由unprotect / protect语句引起的,是,我用一个空白工作簿进行了测试,该工作簿包含一个带有以下代码的模块:

Dim secondsElapsed As Double

startTime = Timer
Sheets("test").Unprotect ("****")
ThisWorkbook.Sheets("Timers").Cells(1, 1) = Round(Timer - startTime, 2)

startTime = Timer
Sheets("test").Protect Password:="****", DrawingObjects:=False, Contents:=True, Scenarios:=True, AllowSorting:=True, AllowFiltering:=True
ThisWorkbook.Sheets("Timers").Cells(2, 1) = Round(Timer - startTime, 2)

`

这将得出以下平均值:

  • Excel 2007年
    • 取消保护:0.02秒
    • 保护:0.01秒
  • Excel 365
    • 取消保护:0.52秒
    • 保护:0.47秒

1 个答案:

答案 0 :(得分:0)

经过更多研究并在其他论坛上提问,我找到了解决方案。 通过在保护语句中添加UserInterfaceOnly:=True参数,可以仅为用户提供保护,从而为VBA提供保护。因此,仅需要保护一次(即可以省略其余代码中的(un)protect语句)。

当然,这还不能解释为什么(un)protect语句需要这么长时间。若要尝试解决此问题的答案,我将直接与Microsoft联系。