Защита паролем макросов второй книги от первой с использованием VBA

#excel #excel-2003 #vba

#excel #excel-2003 #vba

Вопрос:

У меня есть рабочая книга, которая создает вторую рабочую книгу (используя ThisWorkbook.SaveCopyAs ) для удобного представления данных пользователям. Часть обработки выполняется на основе макросов.

Однако меня попросили сделать эти макросы недоступными для пользователей. Их все равно нужно запускать, но для их просмотра / редактирования должен потребоваться пароль. Я могу выяснить, как это сделать с помощью графического интерфейса пользователя (редактор VBA -> щелкните правой кнопкой мыши VBAProject -> Свойства VBAProject -> Защита, установите флажок и введите пароль), но я не нашел способа сделать это с помощью VBA. Workbook.Protect Функция, похоже, блокирует все, кроме VBA.

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

Я использую 2010, но книга должна быть совместима с 2003, поэтому никаких новых хитростей. 🙁

Комментарии:

1. Если мой ответ не поможет, поиск по VBA Project Properties via VBA , похоже, выдал несколько результатов.

2. Я не могу это воспроизвести. Если я создаю книгу с защищенным паролем модулем VBA, поместите на нее кнопку, которая выполняет ThisWorkbook. Сохраните копии, затем нажмите на нее … это сохранит книгу с защищенным проектом VBA. Вы действительно имели в виду ThisWorkbook или вы имели в виду ActiveWorkbook? И, если это последнее, как вы помещаете туда макросы?

Ответ №1:

Это метод, который описывает установку пароля проекта без использования sendkeyshttp://www.standards.com/Office/SetVBAProjectPassword.html

Ответ №2:

Этот пост может быть вам полезен. Обратите внимание, что в комментариях говорится, что вам нужно добавить vbeext1.olb .

Комментарии:

1. О, вау , это ужасный взлом. Похоже, что все, что требует использования SendKeys, может сломаться при первых признаках неполадок. :/.

2. @Margaret Ты не говорила, что хочешь красивую 🙂 lol Как я упоминал выше, были некоторые другие страницы, которые я получил в поиске, на которые я действительно не смотрел. Я думаю, что это одна из тех вещей, о которых люди, являющиеся экспертами в этом, не хотят делиться тем, как они это сделали, в сети…

Ответ №3:

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

Решение было интересным. Дайте вашему проекту простое название или инициалы. Что-то, что люди могут легко найти.

Вы защищаете паролем весь свой проект и сохраняете результирующий файл как XLA (дополнение).

Затем снимите защиту с книги, переименуйте файл (на случай, если вы допустили ошибку) и удалите из него весь код, модули, классы, формы и т.д. Сохраните новый удаленный файл Excel.

Теперь откройте новый удаленный файл и добавьте xla в TOOLS / add ons. Затем перейдите в редактор VBA, Ссылки и найдите свой проект с новым именем и ссылкой (возможно, вам придется сохранить и повторно открыть один раз, чтобы найти в разделе ссылки).

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

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

Я думаю, это решит любую проблему с защищенным кодом.

Удачи