【发布时间】:2019-07-08 20:54:21
【问题描述】:
与 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 秒
【问题讨论】:
-
不看代码很难知道。例如,您是否使用
.Select/.Activate? (如果是这样,please don't)。你是如何取消保护床单的? -
不,除非绝对必要,否则我不会使用
.select或.activate。我使用以下代码行(取消)保护工作表:ActiveSheet.Unprotect ("********")和Sheets(Sheet_Name).Protect Password:="********", DrawingObjects:=False, Contents:=True, Scenarios:=True, AllowSorting:=True, AllowFiltering:=True。这些单独的行很容易多花 0.5 秒来执行。 -
人们要求查看您的其余代码的原因是他们可以尝试重新创建问题并帮助您解决问题或找到可能导致问题的其他内容。这不是已知问题,也不是我在使用 Office 365 时遇到的问题。
-
好的,我知道你是从哪里来的。我没有那样想,因为我注意到它发生在所有模块中,独立于相应模块中的其余代码。因此,我相当肯定代码的其余部分是无关紧要的。为了确保这一点,我用空白工作簿、1 个模块和最低限度的关闭代码重新测试了这个问题。问题依然存在。我会调整我原来的问题。
-
请附上minimal reproducible example,以便每个人都可以重现该问题。
标签: excel vba office365 excel-2007