#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, Ссылки и найдите свой проект с новым именем и ссылкой (возможно, вам придется сохранить и повторно открыть один раз, чтобы найти в разделе ссылки).
Вот и все. новый файл, в котором нет всего кода, будет работать с использованием старого кода, но у вас не будет доступа к нему без пароля. В то же время старый код может размещать код на новых рабочих листах, как и раньше, поскольку проект новой рабочей книги не защищен паролем
Я обнаружил, что при смене местоположения вашим пользователям может потребоваться найти ссылку в ссылках, но я уверен, что вы можете создать макрос для автоматического поиска и связывания (этот макрос, конечно, был бы виден всему миру).
Я думаю, это решит любую проблему с защищенным кодом.
Удачи