Excel 365 vba - (не) защита листа сильно замедляет макрос - PullRequest
0 голосов
/ 14 февраля 2019

Снятие защиты / защиты листа с помощью VBA намного медленнее в Excel 365 по сравнению с Excel 2007. У кого-нибудь есть хоть малейшее представление о том, почему это так?И можно ли что-то сделать, чтобы решить эту проблему, не пропуская функции protect?

Чтобы убедиться, что проблема вызвана исключительно операторами 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 голосов
/ 20 февраля 2019

После дополнительных исследований и расспросов на других форумах я нашел решение.Защитить можно только для пользователя и, следовательно, не для VBA, добавив параметр UserInterfaceOnly:=True в оператор защиты.Поэтому просто необходимо защитить один раз (т. Е. Операторы (не) защиты в остальной части кода могут быть опущены).

Конечно, это еще не объясняет, почему операторы (не) защиты принимаютэто долгоЧтобы попытаться найти ответ на эту проблему, я напрямую свяжусь с Microsoft.

...