Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 365 vba-(un)保护工作表大大降低了宏的速度_Excel_Vba_Office365_Excel 2007 - Fatal编程技术网

Excel 365 vba-(un)保护工作表大大降低了宏的速度

Excel 365 vba-(un)保护工作表大大降低了宏的速度,excel,vba,office365,excel-2007,Excel,Vba,Office365,Excel 2007,与Excel 2007相比,在Excel 365中使用VBA取消保护/保护图纸的速度要慢得多。有人知道为什么会这样吗?在不忽略保护功能的情况下,有什么方法可以解决这个问题吗 为了确保问题仅由unprotect/protect语句引起,我使用一个空白工作簿进行了测试,其中包含一个模块,代码如下: Dim secondsElapsed As Double startTime = Timer Sheets("test").Unprotect ("****") ThisWorkbook.Sheets(

与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秒

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


当然,这还不能解释为什么(联合国)保护声明需要这么长时间。为了找到这个问题的答案,我将直接与微软联系

不看代码很难知道。例如,您是否正在使用
。选择
/
。激活
?(如有)。如何解除对工作表的保护?不,我不使用
。选择
。除非绝对必要,否则激活
。I(取消)使用以下代码行保护工作表:
ActiveSheet.Unprotect(“*******”)
工作表(工作表名称)。保护密码:=“**********”,绘图对象:=False,内容:=True,场景:=True,允许排序:=True,允许过滤:=True
。这些单独的代码行很容易需要+0.5秒才能执行。人们要求查看其余代码的原因是他们可以尝试重新创建问题并帮助您解决问题,或者找到可能导致问题的其他原因。这不是一个已知的问题,也不是我在使用Office 365时遇到的问题。好的,我明白你的意思了。我没有这样想,因为我注意到它发生在所有模块中,独立于相应模块中的其余代码。因此,我相当确定代码的其余部分是不相关的。为了确保这一点,我用一个空白工作簿、一个模块和最低限度的代码重新测试了这个问题。问题依然存在。我将调整我原来的问题。请包括一个,这样每个人都可以复制的问题。