Excel 365 vba - (un)protect sheet 大大降低了宏的速度

Excel 365 vba - (un)protect sheet slows down macro a lot

与 Excel 2007 相比,

Unprotecting/protecting 使用 VBA 的 sheet 在 Excel 365 中要慢得多。有没有人知道为什么是这样吗?有什么办法可以在不省略保护功能的情况下解决这个问题吗?

为了确保问题 完全 是由 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)

`

这会产生以下平均值:

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

当然,这还不能解释为什么 (un)protect 语句需要这么长时间。为了找到这个问题的答案,我将直接联系微软。