|
Удаление макросом VBA себя самого или своего модуля
|
|||
---|---|---|---|
#18+
Многих мучает вопрос как с помощью команды макроса в Excel удалить сам макрос или один из его модулей. Варианты такие: ******************* Sub DeleteAllLines() ' удаляет все что написано в Модуле1 With ThisWorkbook.VBProject.VBComponents("Module1").CodeModule .DeleteLines 1, .CountOfLines End With End sub ******************* Sub DeleteModule() ' удаляет сам Модуль1 Dim vbc As VBComponent Set vbc = ThisWorkbook.VBProject.VBComponents("Module1") ThisWorkbook.VBProject.VBComponents.Remove vbc Set vbc = Nothing End sub ******************* Sub DeleteModule() ' удаляет весь макрос Dim tmp As String Dim vbc As VBComponent Dim prj As VBIDE.VBE Set prj = Excel.Application.VBE For Each vbc In prj.VBProjects("NAME").VBComponents If (vbc.Type = vbext_ct_MSForm Or vbc.Type = vbext_ct_StdModule Or vbc.Type = vbext_ct_ClassModule) And vbc.Name <> "Module2" Then tmp = vbc.Name prj.VBProjects("NAME").VBComponents.Remove vbc tmp = "" End If Next vbc Set prj = Nothing End sub ******************* НО!!!!!!!!!!!!!!!!!!! Все эти коды выполняются ТОЛЬКО с установленной галочкой «Доверять доступ к Visual Basic Project» («Trust access to Visual Basic Project») в параметрах безопасности макросов. ВНИМАНИЕ ВОПРОС! Как программным методом (кодами в начале макроса) изменить параметры безопасности и установить соответствующую галочку? Я НЕ ПИШУ ВИРУСЫ, дело в том, что я продаю свои мелкие программки на VBA и хочу защитить свои авторские права. Мне надо чтобы после определенной даты или после определенного кол-ва запуска программы она удаляла сама себя. Мне НЕ НАДО воздействовать на другие файлы и программы, надо только "лицензировать" свою. Была еще такая идея: После проверки даты или кол-ва запусков, в случае привышения макрос сохраняет свой же файл в формате Excel 3.0, который не может содержать макросов. Идея прекрасно воплощяется в жизнь, но только если сам макрос не защищен паролем! Может как-то развить это направление? Слышал еще такое: Что если проект имеет цифровую подпись MicroSoft то даже эта галочка не нужна, т.к. в таком случае Excel воспринемает эту прогу как "свою родную" и разрешает любые манипуляции с макросом самим макросом. Для этого надо всего-лишь подписаться цифровым сертификатом MS. Кто-нибудь знает как это сделать? Тем более что прога по присвоению сертификатов находится в стандартной комплектации Офиса. Заранее спасибо за все советы! ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2006, 14:38 |
|
Удаление макросом VBA себя самого или своего модуля
|
|||
---|---|---|---|
#18+
Как вариант. А если в начале макроса делать проверку и не выполнять его просто по определенному условию? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2006, 15:09 |
|
Удаление макросом VBA себя самого или своего модуля
|
|||
---|---|---|---|
#18+
Интересно... раз мешает пароль может на каком то этапе его прогрмно убрать? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2006, 17:16 |
|
Удаление макросом VBA себя самого или своего модуля
|
|||
---|---|---|---|
#18+
GoldenAxeВНИМАНИЕ ВОПРОС! Как программным методом (кодами в начале макроса) изменить параметры безопасности и установить соответствующую галочку? Никак. Абсолютно. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2006, 18:31 |
|
Удаление макросом VBA себя самого или своего модуля
|
|||
---|---|---|---|
#18+
GoldenAxeСлышал еще такое: Что если проект имеет цифровую подпись MicroSoft то даже эта галочка не нужна, т.к. в таком случае Excel воспринемает эту прогу как "свою родную" и разрешает любые манипуляции с макросом самим макросом.Нет. "Подписаная" и сконвертированная в add-on книга сможет только запускать имеющиеся в ней макросы без требования к пользователю включить поддержку макросов для этой книги. Но модифицировать макросы она все равно не сможет если пользователь не разрешит. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2006, 18:34 |
|
Удаление макросом VBA себя самого или своего модуля
|
|||
---|---|---|---|
#18+
GoldenAxeВНИМАНИЕ ВОПРОС! Как программным методом (кодами в начале макроса) изменить параметры безопасности и установить соответствующую галочку? За уровень безопасности отвечает параметр "Level" раздела реестра "HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\11.0\\Excel\\Security" (для Office 2003). За доверительный доступ отвечает параметр "AccessVBOM" того же раздела. Уровень безопасности в начале выполнения макроса изменить нельзя. Собственно, что выполнять, если макросы отключены. Его можно изменить из внешнего приложения или скрипта. Этот вопрос обсуждался здесь. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2006, 22:09 |
|
Удаление макросом VBA себя самого или своего модуля
|
|||
---|---|---|---|
#18+
k-nikeКак вариант. А если в начале макроса делать проверку и не выполнять его просто по определенному условию? Да это как раз не вариант... Елси просто не запустить макрос - его тело останется без изменений, и если в него влезть - можно просто убрать эту проверку и прога заработает. А влезть даже в запароленый макрос - не проблема... "спасибо" всяким прогам по открытию VBA паролей. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2006, 11:19 |
|
Удаление макросом VBA себя самого или своего модуля
|
|||
---|---|---|---|
#18+
Ashton GoldenAxeВНИМАНИЕ ВОПРОС! Как программным методом (кодами в начале макроса) изменить параметры безопасности и установить соответствующую галочку? За уровень безопасности отвечает параметр "Level" раздела реестра "HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\11.0\\Excel\\Security" (для Office 2003). За доверительный доступ отвечает параметр "AccessVBOM" того же раздела. Уровень безопасности в начале выполнения макроса изменить нельзя. Собственно, что выполнять, если макросы отключены. Его можно изменить из внешнего приложения или скрипта. Этот вопрос обсуждался здесь. Во! Мы близки к развязке! Но! после написания такого: Sub pop() \' Меняем доверие On Error Resume Next Dim objShell Dim vatReturn Set objShell = CreateObject("WScript.Shell") vatReturn = objShell.RegRead( _ "HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\11.0\\Excel\\Security\\AccessVBOM") MsgBox vatReturn objShell.RegWrite _ "HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\11.0\\Excel\\Security\\AccessVBOM", _ 1, "REG_DWORD" MsgBox vatReturn \' удаляем все строки в Модуле 1 With ThisWorkbook.VBProject.VBComponents("Module1").CodeModule .DeleteLines 1, .CountOfLines End With End Sub Даже когда сначала выдает значение парамерта "0", затем меняет его на "1", все равно галочка не появляется и модуль не стирается... только когда вручную вставишь галочку в поле Доверять доступ к VB Project только тогда макрос удалит модуль1... Т.е. в реестре меняется. а на деле ничего не происходит, даже после перезапуска Excel... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2006, 11:24 |
|
Удаление макросом VBA себя самого или своего модуля
|
|||
---|---|---|---|
#18+
А если вот такой дикий вариант: Делаете в VB6 ActiveX Dll. В нем пишете код для макроса. регистрируете Dll в системе. затем в Excel подключаете эту dll, и запускаете в ней процедуру с вашим кодом. А в самой dll можно втыкать любые проверки на исполнение макроса, подломать их будет достаточно сложно... см аттач. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2006, 11:42 |
|
Удаление макросом VBA себя самого или своего модуля
|
|||
---|---|---|---|
#18+
аттач: ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2006, 11:42 |
|
Удаление макросом VBA себя самого или своего модуля
|
|||
---|---|---|---|
#18+
Артем GИнтересно... раз мешает пароль может на каком то этапе его прогрмно убрать? Интересная идея... А как можно макросом отключить свой собственный пароль? Есть мысли? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2006, 11:47 |
|
Удаление макросом VBA себя самого или своего модуля
|
|||
---|---|---|---|
#18+
NikzА если вот такой дикий вариант: Делаете в VB6 ActiveX Dll. В нем пишете код для макроса. регистрируете Dll в системе. затем в Excel подключаете эту dll, и запускаете в ней процедуру с вашим кодом. А в самой dll можно втыкать любые проверки на исполнение макроса, подломать их будет достаточно сложно... см аттач. Это довольно сложно... в смысле заставить юзверя сначала Dll регистрировать ... дело в том, что изначальная задача - упростить жизнь простым смертным, которые не знают даже как поменять уровень безопасности, ну а как прописать dll в систему им точно не по-зубам... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2006, 11:51 |
|
Удаление макросом VBA себя самого или своего модуля
|
|||
---|---|---|---|
#18+
GoldenAxe NikzА если вот такой дикий вариант: Делаете в VB6 ActiveX Dll. В нем пишете код для макроса. регистрируете Dll в системе. затем в Excel подключаете эту dll, и запускаете в ней процедуру с вашим кодом. А в самой dll можно втыкать любые проверки на исполнение макроса, подломать их будет достаточно сложно... см аттач. Это довольно сложно... в смысле заставить юзверя сначала Dll регистрировать ... дело в том, что изначальная задача - упростить жизнь простым смертным, которые не знают даже как поменять уровень безопасности, ну а как прописать dll в систему им точно не по-зубам... а что мешает повесить в Workbook_Open() автоматическую регистрацию dll Код: plaintext 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2006, 12:08 |
|
Удаление макросом VBA себя самого или своего модуля
|
|||
---|---|---|---|
#18+
Nikz а что мешает повесить в Workbook_Open() автоматическую регистрацию dll Код: plaintext 1. 2. 3. 4. 5.
Хмм... я об этом не подумал... А можно опубликовать что конкретно должно находиться в dll чтобы я смог удалить один из модулей? Я просто с dll никогда не связывался... Если это возможно - киньте примерчик такой библиотеки на мыло или тут выложите... goldenaxxe@mail.ru А если возможно - то пару xls + dll которые взаимодействуют друг с другом... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2006, 12:24 |
|
Удаление макросом VBA себя самого или своего модуля
|
|||
---|---|---|---|
#18+
относительно простых у меня к сожалению нет есть пара проектов, но это так сказать "вещи в себе", они запускаются только при куче установленного специализированного софта (для которого они собственно и писались, как раз по той же причине - для защиты кода, потому что базовые знания у юзеров VB+advanced office password recovery и прощай деньги за пару месяцев кодописания) так что боевой пример выслать не могу но чуть выше лежит простенький пример в книге excel образец того как вызвать эту dll в проекте VB одна процедура runMacro в нее excel передает свой application в этой процедуре пишете все то же самое что и в модуле в excel, только не забывайте указывать к какому приложению excel относятся эти действия. то есть если в excel было написано Код: plaintext
Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2006, 12:41 |
|
Удаление макросом VBA себя самого или своего модуля
|
|||
---|---|---|---|
#18+
GoldenAxe k-nikeКак вариант. А если в начале макроса делать проверку и не выполнять его просто по определенному условию? Да это как раз не вариант... Елси просто не запустить макрос - его тело останется без изменений, и если в него влезть - можно просто убрать эту проверку и прога заработает. А влезть даже в запароленый макрос - не проблема... "спасибо" всяким прогам по открытию VBA паролей. Не хочу показаться пессимистом, но: 1. Если юзер чайник, то навряд ли он может что-то изменить. 2. А если он маломальски в этом разбирается (по крайней мере, знает про программы, которые вскрывают VBA-пароли), то ему не составит труда вскрыть файл еще до того как закончится срок действия макросов или элементарно скопировать этот файл. Тут на форуме тусуется человек, который продает VBA-пректы. У него бы поинтересоваться как их защищать, если это, конечно, не секретная информация. Кажется его MXAlex зовут или как-то так. Может лучше тогда это дело на VB переписать? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2006, 14:00 |
|
Удаление макросом VBA себя самого или своего модуля
|
|||
---|---|---|---|
#18+
А можно с помощью VBA имитировать нажатия клавишь? и программно просто последовательно нажимая виртуальные клавиши поставить эту галочку «Доверять доступ к Visual Basic Project» ? или с помощью запущенной VBA стандартной Экранной клавиатурой (Главное меню\Программы\Стандартные\Специальные возможности\Экранная клавиатура) Вот еще: Я писал что с помощью ключа objShell.RegWrite _ "HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Excel\Security\AccessVBOM", _ 1, "REG_DWORD" я менял параметр AccessVBOM, который в реестре менялся, а в Excel - нет. Я попробовал руками поменять параметр AccessVBOM в реестре - и тоже в Excel ничего не поменялось!!! НО!!! если Excel закрыт - то поменяв этот параметр при следующем запуске Excel галочка ПОЯВЛЯЕТСЯ!!! Т.е. надо чтоб скрипт сработал при закрытом Экселе!!! Как это можно сделать? Может макрос закрыть Excel и продолжать работать из оперативной памяти? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2006, 14:13 |
|
Удаление макросом VBA себя самого или своего модуля
|
|||
---|---|---|---|
#18+
k-nike Не хочу показаться пессимистом, но: 1. Если юзер чайник, то навряд ли он может что-то изменить. 2. А если он маломальски в этом разбирается (по крайней мере, знает про программы, которые вскрывают VBA-пароли), то ему не составит труда вскрыть файл еще до того как закончится срок действия макросов или элементарно скопировать этот файл. Тут на форуме тусуется человек, который продает VBA-пректы. У него бы поинтересоваться как их защищать, если это, конечно, не секретная информация. Кажется его MXAlex зовут или как-то так. Может лучше тогда это дело на VB переписать? Согласен, но согласитесь, чаще всего мы начинаем лезть в программу только тогда, когда она ломается... Мне например и нафиг не надо знать как работает чужой макрос, если он работает... я туда полезу только если меня что-то не устроит... На это я и расчитываю... что когда юзер будет пользовать мою прогу - она будет работать и мыслей туда лазить у него не возникнет, а когда истечет срок годности - и лазить будет некуда %)) По поводу написания такой проги на других языках - можно, но это будет уже 2 файла, один ехе и один xls(в котором всякие исходники для каждого конкретного запуска)... а это дополнительные трудности для распространения. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.04.2006, 14:21 |
|
Удаление макросом VBA себя самого или своего модуля
|
|||
---|---|---|---|
#18+
Чем меньше будем верить умным советам, тем больше будем тратить драгоценное время: White Owl GoldenAxeВНИМАНИЕ ВОПРОС! Как программным методом (кодами в начале макроса) изменить параметры безопасности и установить соответствующую галочку? Никак. Абсолютно. White Owl GoldenAxeСлышал еще такое: Что если проект имеет цифровую подпись MicroSoft то даже эта галочка не нужна, т.к. в таком случае Excel воспринемает эту прогу как "свою родную" и разрешает любые манипуляции с макросом самим макросом. Нет. "Подписаная" и сконвертированная в add-on книга сможет только запускать имеющиеся в ней макросы без требования к пользователю включить поддержку макросов для этой книги. Но модифицировать макросы она все равно не сможет если пользователь не разрешит. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2006, 11:49 |
|
Удаление макросом VBA себя самого или своего модуля
|
|||
---|---|---|---|
#18+
White Owl GoldenAxeВНИМАНИЕ ВОПРОС! Как программным методом (кодами в начале макроса) изменить параметры безопасности и установить соответствующую галочку? Никак. Абсолютно. Короче! Все те, кто заявляет так категорично - могут отдыхать! По поводу уровня защиты - программно поменять можно, только окно Экселя должно быть закрыто. Скрипт сюда выкладывать не буду (лично - могу послать) По поводу галочки доверия доступа к VBA проектам - ставится и убирается программно "на раз" прямо на глазах пользователя и без его участия!!! И никаких гвоздей. И вообще после пары дней усиленного штудирования литературы и хелпов к VBA могу сказать одно: ТАМ МОЖНО ВСЕ, ВПЛОТЬ ДО УНИЧТОЖЕНИЯ ВСЕХ ДИСКОВ ВКЛЮЧАЯ СИСТЕМНЫЙ!!! А те, кто "где-то" "что-то" слышал про невозможность это сделать - ИДИТЕ ЛЕСОМ, УЧИТЕ МАТЧАСТЬ!!! Мной написаны коды, которые могут по определенному условию уничтожать саму рабочую книгу, все модули и макросы в ней, даже если макрос защищен паролем! а также, в случае необходимости, уничтожать свои уцелевшие копии на этом компе и на компах в сети. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2006, 17:14 |
|
Удаление макросом VBA себя самого или своего модуля
|
|||
---|---|---|---|
#18+
GoldenAxe White Owl GoldenAxeВНИМАНИЕ ВОПРОС! Как программным методом (кодами в начале макроса) изменить параметры безопасности и установить соответствующую галочку? Никак. Абсолютно. Короче! Все те, кто заявляет так категорично - могут отдыхать! По поводу уровня защиты - программно поменять можно, только окно Экселя должно быть закрыто.Повнимательнее читай что сам пишешь. Если окно Экселя закрыто. Еще надо было добавить: и если Эксель не висит в памяти в режиме горячего демона, то да можно будет поменять параметры безопасности не через меню Экселя. Из макроса это сделать невозможно. GoldenAxeПо поводу галочки доверия доступа к VBA проектам - ставится и убирается программно "на раз" прямо на глазах пользователя и без его участия!!! И никаких гвоздей.Можно? Правда? Показывай. Не хочешь публично - мой емыл в профайле есть :) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2006, 18:33 |
|
Удаление макросом VBA себя самого или своего модуля
|
|||
---|---|---|---|
#18+
Помнится как то автор начинал вопрос с этого кода и по моему, это код VBA??? GoldenAxeSub DeleteAllLines() ' удаляет все что написано в Модуле1 With ThisWorkbook.VBProject.VBComponents("Module1").CodeModule .DeleteLines 1, .CountOfLines End With End sub ******************* Sub DeleteModule() ' удаляет сам Модуль1 Dim vbc As VBComponent Set vbc = ThisWorkbook.VBProject.VBComponents("Module1") ThisWorkbook.VBProject.VBComponents.Remove vbc Set vbc = Nothing End sub ******************* Sub DeleteModule() ' удаляет весь макрос Dim tmp As String Dim vbc As VBComponent Dim prj As VBIDE.VBE Set prj = Excel.Application.VBE А если потом передумал, то конечно, компьютер работает под программу, и разные вирусы пишутся как обыкновенные программы, и форматирование идет программно, Но все это, не изменение уровня зашиты в Excele с помощью кода VBA О чем писал автор: GoldenAxeКак программным методом (кодами в начале макроса) изменить параметры безопасности и установить соответствующую галочку? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.04.2006, 13:01 |
|
Удаление макросом VBA себя самого или своего модуля
|
|||
---|---|---|---|
#18+
[/quot]Можно? Правда? Показывай. Не хочешь публично - мой емыл в профайле есть :)[/quot] Послал лично... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2006, 10:34 |
|
Удаление макросом VBA себя самого или своего модуля
|
|||
---|---|---|---|
#18+
AvtopicПомнится как то автор начинал вопрос с этого кода и по моему, это код VBA??? GoldenAxeSub DeleteAllLines() ' удаляет все что написано в Модуле1 With ThisWorkbook.VBProject.VBComponents("Module1").CodeModule .DeleteLines 1, .CountOfLines End With End sub ******************* Sub DeleteModule() ' удаляет сам Модуль1 Dim vbc As VBComponent Set vbc = ThisWorkbook.VBProject.VBComponents("Module1") ThisWorkbook.VBProject.VBComponents.Remove vbc Set vbc = Nothing End sub ******************* Sub DeleteModule() ' удаляет весь макрос Dim tmp As String Dim vbc As VBComponent Dim prj As VBIDE.VBE Set prj = Excel.Application.VBE А если потом передумал, то конечно, компьютер работает под программу, и разные вирусы пишутся как обыкновенные программы, и форматирование идет программно, Но все это, не изменение уровня зашиты в Excele с помощью кода VBA О чем писал автор: GoldenAxeКак программным методом (кодами в начале макроса) изменить параметры безопасности и установить соответствующую галочку? Да, это код VBA, а что не устраивает? И именно программным методом именно с помощью кода VBA ставится галочка Доверия доступа к VBP. И именно с помощью VBA можно поменять уровни безопасности, главное чтоб юзер хоть один раз запустил макрос... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2006, 12:06 |
|
Удаление макросом VBA себя самого или своего модуля
|
|||
---|---|---|---|
#18+
GoldenAxeПослал лично...хм..... Почти убедил. Минусы твоего конкретного макроса: - Не будет работать на Экселях других версий. - Не будет работать на не русских Экселях. Но в принципе, да. Если этот макрос разрешить хотя бы один раз - он сделает то что нужно. Но главный минус - программная смена уровня безопасности потенциально вирусоопасна. Как только до твоего трюка додумается очередной кретин-вирусописатель этот трюк будет включен в базы антивирусов и твоя ЧЕСТНАЯ рабочая книга начнет считаться вирусом :) Лучше всего, класть инструкцию по смене уровня безопасности в дистрибутив программы. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2006, 19:04 |
|
|
start [/forum/topic.php?fid=60&msg=33645653&tid=2155044]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
68ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 181ms |
0 / 0 |