Защита рабочей книги не защищена независимо от пароля (VBA Excel 2010)

Я искал указанную проблему с различными ключевыми словами, но все результаты были либо связаны с тем, как защитить книгу, либо снять с нее защиту, не зная пароля.

Моя текущая проблема на самом деле не является большой проблемой, но она кажется такой странной, что я хочу знать, сталкивались ли с ней другие люди.

В настоящее время я делаю макросы Excel 2010 VBA для автоматизации обработки данных. Я добавляю защиту рабочих книг, чтобы пользователи не могли перемещать рабочие листы. Я сделал это через VBA «thisworkbook.protect» или через традиционное меню Excel.

Когда я запускаю следующий код, защита книги полностью исчезает независимо от паролей, настроек структуры/окна.

Sub test()
        ThisWorkbook.Worksheets(1).Cells(1, 1).Value(11) = ThisWorkbook.Worksheets(3).Cells(1, 1).Value(11)
End Sub

Простое добавление «thisworkbook.protect» в конце кода повторно блокирует книгу и решает проблему, поэтому это не является большой проблемой. Но явление для меня совершенно непонятное.

Я ценю любого, кто даст отзыв. Спасибо.

edit 1 Я считаю, что это не проблема с листом.Защита. Моя проблема возникает независимо от того, защищены ли рабочие листы и ячейки, и меня особенно беспокоят позиции и имена рабочих листов, которые попадают в команду workbook.protect.

Изменить 2:
Таким образом, проблема заключается в следующем и не касается разницы между методами Workbook.Protect и Worksheet.Protect:
1. Я открываю защищенную книгу;
2. Запускаю предоставленный фрагмент кода без< /strong> снятие защиты книги, так как это не влияет на защиту листа;
3. Защита книги отменена предыдущим действием, несмотря на мои намерения. Приходится снова защищать книгу.


person valefore    schedule 31.01.2020    source источник
comment
Ну, это так, я могу это подтвердить. Это похоже на ошибку, и в новейшей версии Excel 2019 она работает точно так же. Я имею в виду, что об этом следует сообщить в Microsoft, поскольку это полностью нарушает защиту рабочей книги.   -  person Pᴇʜ    schedule 31.01.2020
comment
Насколько мне известно, метод Workbook.Protect защищает книгу от взаимодействия с пользователем — общие действия, связанные с книгой (например, добавление/удаление/перемещение листов), которые отправляются из пользовательского интерфейса, но не из кода. Чтобы защитить листы, вы должны использовать метод Worksheet.Protect, который работает так же, как и для изменений кода.   -  person Vitaliy Prushak    schedule 31.01.2020
comment
здесь здесь является исходной ссылкой для моего комментария.   -  person Vitaliy Prushak    schedule 31.01.2020
comment
@Pᴇʜ Спасибо за подтверждение. Приятно знать, что я не единственный, кто сталкивается с этой проблемой.   -  person valefore    schedule 31.01.2020
comment
@valefore Извините, я неправильно понял проблему. Я удалил свой ответ как не относящийся к делу и предложил отредактировать исходный пост, чтобы проблема выглядела яснее.   -  person Vitaliy Prushak    schedule 31.01.2020
comment
@valefore Я собираюсь сообщить об этой ошибке в Microsoft.   -  person Pᴇʜ    schedule 31.01.2020


Ответы (1)


Хорошо, ответ от Microsoft был таким:

Если я правильно интерпретирую ваши выводы, этот отчет основан на том, что злоумышленник скопировал и получил доступ к файлу Excel, содержащему защищенные паролем книги/листы/поля, которые не были зашифрованы. В данном случае это ожидаемая функция.

Мой отчет был немедленно закрыт, поэтому у меня не было возможности настаивать на том, что это ошибка.

Так что они буквально говорят, что это «функция» (ожидаемая функция), а не ошибка. Очевидно, они считают защиту книги не функцией безопасности, единственная надежная защита — это шифрование книги с помощью пароля, который вам действительно нужно ввести, прежде чем вы сможете просмотреть ее.

ИМХО, это все еще ошибка и не ожидаемое поведение. Но Microsoft, очевидно, все равно, что весьма спорно, поскольку эта ошибка означает, что защита книги бесполезна и только не позволяет пользователям случайно что-то уничтожить.

Таким образом, либо вы находите обходной путь, поскольку знаете, что можете повторно защитить его после запуска кода такого типа, либо вы не используете эту «функцию», вызывающую ошибку.

Но все же любой, кто знает об этой ошибке, может использовать ее для снятия защиты с любой книги. Я не вижу способа предотвратить удаление. И поскольку эта ошибка уже работает в Excel 2010, а также в последних версиях, очень маловероятно, что Microsoft исправит ее в ближайшем будущем.

person Pᴇʜ    schedule 12.02.2020