Снятие защиты / защиты листа с помощью 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 секунды