Страница 2 из 2
Re: Excel VBA - снять пароль с проекта, программно
Добавлено: 06 фев 2008, 13:05
VictorM
Aent, спасибо, благодаря Вашей подсказке я смог решить некоторую часть задачи.
В приложенном файле, книга ABook.xls, нажимаем кнопочку на листе (пароль, на всякий случай, 12345) и все получилось "на раз".
Я давай тут же пробовать на примере, а оно никак

. Я уже куда только этот код не тулил - не то

Посмотрите, пожалуйста, опытным глазом, где у меня косяк?
Re: Excel VBA - снять пароль с проекта, программно
Добавлено: 06 фев 2008, 14:38
Aent
VictorM, а что собственно у вас не получается ?
Повторная установка пароля ? Так фокус в другом месте ...
Кстати есть ещё один "экзотический" вариант.
Если у вас офис 2003 SP3 или 2007 то можно попробовать вашу книгу с макросам хранить в формате xlsm (2007 Excel) т.е в обыкновенном zip'е
В этом случае исходный код модет быть модифицирован как текстовый файл
вне объектной модели Excel.
Re: Excel VBA - снять пароль с проекта, программно
Добавлено: 06 фев 2008, 14:42
Aent
А а магистральный путь MS - переход на VSTO/VSTA и отделение исполняемого кода
от данных рабочей книги...
Хотя это то же много за собой тянет
Re: Excel VBA - снять пароль с проекта, программно
Добавлено: 06 фев 2008, 15:12
VictorM
Aent, не получается работа кода снятия пароля в примере. Т.е. в отдельно взятой книге ( ABook.xls) все срабатывет четко, а когда я попытался применить это в примере replace module.xls + UserBook.xls, выскакивает окно ID:=2578. ну конечно дальше все наперекосяк. "Меня терзают смутные сомнения", что я не там поместил сам код. А где - не могу разобраться. Буду дальше пробовать.
Что же касается "экзотических" вариантов, а тем более
переход на VSTO/VSTA и отделение исполняемого кода от данных рабочей книги...
то все это будет уже сложнее самого проекта

, и тогда уж проще вообще снять пароль.
Re: Excel VBA - снять пароль с проекта, программно
Добавлено: 08 фев 2008, 00:31
VictorM
Идея была такая, есть некое моё приложение (код VBA закрыт паролем), работающее у нескольких пользователей. На определенном этапе накопились изменнения, которые нужно внести в это приложение, т.е. модифицированный модуль.
Я рассылаю пользователям рабочую книгу с этим модулем (хотя бывает, что и сам прихожу с флешкой), при открытии которой нужно нажать на кнопочку и все. Единственное условие - обе книги должны быть в одной папке.
получилось вот что (см. вложенный файл) открываем replace module.xls и давим.
Спасибо Aent за подсказку.
P.S. есть еще идея, в случае рассылки файла, удалять сразу книгу с новым модулем, но это после. Тем более, что этот вопрос был подробно решен на нашем форуме Pavel55
Re: Excel VBA - снять пароль с проекта, программно
Добавлено: 08 фев 2008, 01:54
Aent
VictorM, когда то у меня была похожая проблема, но я поступил прямо наоборот.
Распространял книгу с новым VBA кодом и копировал
в неё данные и имена из старой книги клиента. А затем старую книгу удалял
И никакой модификации кода проекта

Re: Excel VBA - снять пароль с проекта, программно
Добавлено: 08 фев 2008, 09:14
VictorM
Aent, спасибо, тоже вариант (возьму на заметку), но в моем случае, по некоторым причинам, мне нужно было именно так.
Re: Excel VBA - снять пароль с проекта, программно
Добавлено: 13 фев 2008, 00:10
VictorM
Неожиданно возникла проблема с методом SendKeys.
Если применить в пароле SHIFT+9 или SHIFT+0, т.е. символы "(" или ") " не получается их прописать в строке SendKeys. Возникает ошибка. Посмотрел справку, получается, что это служебные символы и их использовать нельзя в этой строке? Или все-таки можно? Никак не получается

Подскажите, пожалуйста.
Спасибо.
Re: Excel VBA - снять пароль с проекта, программно
Добавлено: 14 фев 2008, 11:35
VictorM
Все решилось до безобразия просто, цитата от
Pashulka:
предлагаю выдержку из справки Microsoft Excel 97:
Символы плюс (+), "крышка" (^), знак процентов (%), тильда (~) и круглые скобки ( ) имеют специальное значение для инструкции SendKeys. Чтобы указать передачу одного из этих символов, следует заключить его в фигурные скобки ({}). Например, знаку плюс соответствует код {+}. Квадратные скобки ([ ]) не имеют специального значения для инструкции SendKeys, однако, их также необходимо заключать в фигурные скобки, поскольку они могут иметь специальное значение для других приложений, например, при динамическом обмене данными (DDE). Фигурным скобкам соответствуют коды {{} и {}}.
т.е. SHIFT+9, символ "(" нужно было прописать - SendKeys "+{(}" и т.д.
теперь все работает на "ура"

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