Excel VBA - снять пароль с проекта, программно

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

Aent, спасибо, благодаря Вашей подсказке я смог решить некоторую часть задачи.
В приложенном файле, книга ABook.xls, нажимаем кнопочку на листе (пароль, на всякий случай, 12345) и все получилось "на раз".
Я давай тут же пробовать на примере, а оно никак :confused: . Я уже куда только этот код не тулил - не то :confused:
Посмотрите, пожалуйста, опытным глазом, где у меня косяк?
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

VictorM, а что собственно у вас не получается ?
Повторная установка пароля ? Так фокус в другом месте ...
Кстати есть ещё один "экзотический" вариант.
Если у вас офис 2003 SP3 или 2007 то можно попробовать вашу книгу с макросам хранить в формате xlsm (2007 Excel) т.е в обыкновенном zip'е
В этом случае исходный код модет быть модифицирован как текстовый файл
вне объектной модели Excel.
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

А а магистральный путь MS - переход на VSTO/VSTA и отделение исполняемого кода
от данных рабочей книги...
Хотя это то же много за собой тянет
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

Aent, не получается работа кода снятия пароля в примере. Т.е. в отдельно взятой книге ( ABook.xls) все срабатывет четко, а когда я попытался применить это в примере replace module.xls + UserBook.xls, выскакивает окно ID:=2578. ну конечно дальше все наперекосяк. "Меня терзают смутные сомнения", что я не там поместил сам код. А где - не могу разобраться. Буду дальше пробовать.
Что же касается "экзотических" вариантов, а тем более
переход на VSTO/VSTA и отделение исполняемого кода от данных рабочей книги...
то все это будет уже сложнее самого проекта :) , и тогда уж проще вообще снять пароль.
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

Идея была такая, есть некое моё приложение (код VBA закрыт паролем), работающее у нескольких пользователей. На определенном этапе накопились изменнения, которые нужно внести в это приложение, т.е. модифицированный модуль.
Я рассылаю пользователям рабочую книгу с этим модулем (хотя бывает, что и сам прихожу с флешкой), при открытии которой нужно нажать на кнопочку и все. Единственное условие - обе книги должны быть в одной папке.
получилось вот что (см. вложенный файл) открываем replace module.xls и давим.
Спасибо Aent за подсказку.
P.S. есть еще идея, в случае рассылки файла, удалять сразу книгу с новым модулем, но это после. Тем более, что этот вопрос был подробно решен на нашем форуме Pavel55
Аватара пользователя
Aent
Сообщения: 1129
Зарегистрирован: 01 окт 2006, 14:52
Откуда: Saratov,Russia
Контактная информация:

VictorM, когда то у меня была похожая проблема, но я поступил прямо наоборот.
Распространял книгу с новым VBA кодом и копировал в неё данные и имена из старой книги клиента. А затем старую книгу удалял :)
И никакой модификации кода проекта :)
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

Aent, спасибо, тоже вариант (возьму на заметку), но в моем случае, по некоторым причинам, мне нужно было именно так.
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

Неожиданно возникла проблема с методом SendKeys.
Если применить в пароле SHIFT+9 или SHIFT+0, т.е. символы "(" или ") " не получается их прописать в строке SendKeys. Возникает ошибка. Посмотрел справку, получается, что это служебные символы и их использовать нельзя в этой строке? Или все-таки можно? Никак не получается :confused: Подскажите, пожалуйста.
Спасибо.
Аватара пользователя
VictorM
Сообщения: 794
Зарегистрирован: 23 окт 2006, 01:44
Откуда: Lugansk, Ukraine
Контактная информация:

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