powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Удаление макросом VBA себя самого или своего модуля
47 сообщений из 47, показаны все 2 страниц
Удаление макросом VBA себя самого или своего модуля
    #33643655
GoldenAxe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Многих мучает вопрос как с помощью команды макроса в 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. Кто-нибудь знает как это сделать? Тем более что прога по присвоению сертификатов находится в стандартной комплектации Офиса.

Заранее спасибо за все советы!
...
Рейтинг: 0 / 0
Удаление макросом VBA себя самого или своего модуля
    #33643757
Фотография k-nike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант.
А если в начале макроса делать проверку и не выполнять его просто по определенному условию?
...
Рейтинг: 0 / 0
Удаление макросом VBA себя самого или своего модуля
    #33644224
Артем G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Интересно... раз мешает пароль может на каком то этапе его прогрмно убрать?
...
Рейтинг: 0 / 0
Удаление макросом VBA себя самого или своего модуля
    #33644470
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GoldenAxeВНИМАНИЕ ВОПРОС!
Как программным методом (кодами в начале макроса) изменить параметры безопасности и установить соответствующую галочку?
Никак. Абсолютно.
...
Рейтинг: 0 / 0
Удаление макросом VBA себя самого или своего модуля
    #33644481
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GoldenAxeСлышал еще такое:
Что если проект имеет цифровую подпись MicroSoft то даже эта галочка не нужна, т.к. в таком случае Excel воспринемает эту прогу как "свою родную" и разрешает любые манипуляции с макросом самим макросом.Нет.
"Подписаная" и сконвертированная в add-on книга сможет только запускать имеющиеся в ней макросы без требования к пользователю включить поддержку макросов для этой книги. Но модифицировать макросы она все равно не сможет если пользователь не разрешит.
...
Рейтинг: 0 / 0
Удаление макросом VBA себя самого или своего модуля
    #33644797
Ashton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GoldenAxeВНИМАНИЕ ВОПРОС!
Как программным методом (кодами в начале макроса) изменить параметры безопасности и установить соответствующую галочку?
За уровень безопасности отвечает параметр "Level" раздела реестра "HKEY_CURRENT_USER\\Software\\Microsoft\\Office\\11.0\\Excel\\Security" (для Office 2003).

За доверительный доступ отвечает параметр "AccessVBOM" того же раздела.

Уровень безопасности в начале выполнения макроса изменить нельзя. Собственно, что выполнять, если макросы отключены. Его можно изменить из внешнего приложения или скрипта. Этот вопрос обсуждался здесь.
...
Рейтинг: 0 / 0
Удаление макросом VBA себя самого или своего модуля
    #33645567
GoldenAxe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
k-nikeКак вариант.
А если в начале макроса делать проверку и не выполнять его просто по определенному условию?

Да это как раз не вариант... Елси просто не запустить макрос - его тело останется без изменений, и если в него влезть - можно просто убрать эту проверку и прога заработает. А влезть даже в запароленый макрос - не проблема... "спасибо" всяким прогам по открытию VBA паролей.
...
Рейтинг: 0 / 0
Удаление макросом VBA себя самого или своего модуля
    #33645586
GoldenAxe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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...
...
Рейтинг: 0 / 0
Удаление макросом VBA себя самого или своего модуля
    #33645650
Nikz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если вот такой дикий вариант:

Делаете в VB6 ActiveX Dll.
В нем пишете код для макроса.
регистрируете Dll в системе.
затем в Excel подключаете эту dll, и запускаете в ней процедуру с вашим кодом.

А в самой dll можно втыкать любые проверки на исполнение макроса, подломать их будет достаточно сложно...

см аттач.
...
Рейтинг: 0 / 0
Удаление макросом VBA себя самого или своего модуля
    #33645653
Nikz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
аттач:
...
Рейтинг: 0 / 0
Удаление макросом VBA себя самого или своего модуля
    #33645671
GoldenAxe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Артем GИнтересно... раз мешает пароль может на каком то этапе его прогрмно убрать?

Интересная идея... А как можно макросом отключить свой собственный пароль? Есть мысли?
...
Рейтинг: 0 / 0
Удаление макросом VBA себя самого или своего модуля
    #33645683
GoldenAxe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NikzА если вот такой дикий вариант:

Делаете в VB6 ActiveX Dll.
В нем пишете код для макроса.
регистрируете Dll в системе.
затем в Excel подключаете эту dll, и запускаете в ней процедуру с вашим кодом.

А в самой dll можно втыкать любые проверки на исполнение макроса, подломать их будет достаточно сложно...

см аттач.

Это довольно сложно... в смысле заставить юзверя сначала Dll регистрировать ... дело в том, что изначальная задача - упростить жизнь простым смертным, которые не знают даже как поменять уровень безопасности, ну а как прописать dll в систему им точно не по-зубам...
...
Рейтинг: 0 / 0
Удаление макросом VBA себя самого или своего модуля
    #33645773
Nikz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GoldenAxe NikzА если вот такой дикий вариант:

Делаете в VB6 ActiveX Dll.
В нем пишете код для макроса.
регистрируете Dll в системе.
затем в Excel подключаете эту dll, и запускаете в ней процедуру с вашим кодом.

А в самой dll можно втыкать любые проверки на исполнение макроса, подломать их будет достаточно сложно...

см аттач.

Это довольно сложно... в смысле заставить юзверя сначала Dll регистрировать ... дело в том, что изначальная задача - упростить жизнь простым смертным, которые не знают даже как поменять уровень безопасности, ну а как прописать dll в систему им точно не по-зубам...

а что мешает повесить в Workbook_Open() автоматическую регистрацию dll
Код: plaintext
1.
2.
3.
4.
5.
Private Sub Workbook_Open()

Shell "regsvr32 /s " & ThisWorkbook.Path & "\Project1.dll", vbHide

End Sub
...
Рейтинг: 0 / 0
Удаление макросом VBA себя самого или своего модуля
    #33645846
GoldenAxe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Nikz
а что мешает повесить в Workbook_Open() автоматическую регистрацию dll
Код: plaintext
1.
2.
3.
4.
5.
Private Sub Workbook_Open()

Shell "regsvr32 /s " & ThisWorkbook.Path & "\Project1.dll", vbHide

End Sub


Хмм... я об этом не подумал...
А можно опубликовать что конкретно должно находиться в dll чтобы я смог удалить один из модулей? Я просто с dll никогда не связывался...
Если это возможно - киньте примерчик такой библиотеки на мыло или тут выложите... goldenaxxe@mail.ru
А если возможно - то пару xls + dll которые взаимодействуют друг с другом...
...
Рейтинг: 0 / 0
Удаление макросом VBA себя самого или своего модуля
    #33645918
Nikz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
относительно простых у меня к сожалению нет
есть пара проектов, но это так сказать "вещи в себе", они запускаются только при куче установленного специализированного софта (для которого они собственно и писались, как раз по той же причине - для защиты кода, потому что базовые знания у юзеров VB+advanced office password recovery и прощай деньги за пару месяцев кодописания)
так что боевой пример выслать не могу
но чуть выше лежит простенький пример
в книге excel образец того как вызвать эту dll
в проекте VB одна процедура runMacro
в нее excel передает свой application
в этой процедуре пишете все то же самое что и в модуле в excel, только не забывайте указывать к какому приложению excel относятся эти действия.
то есть если в excel было написано
Код: plaintext
Cells( 1 , 1 )= 123 
то в dll надо написать
Код: plaintext
xApp.Cells( 1 , 1 )= 123 
то есть в принципе можно прямо скопировать модуль из excel, и только подставлять xApp там где вы обращаетесь к текущему приложению excel
...
Рейтинг: 0 / 0
Удаление макросом VBA себя самого или своего модуля
    #33646217
Фотография k-nike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GoldenAxe k-nikeКак вариант.
А если в начале макроса делать проверку и не выполнять его просто по определенному условию?

Да это как раз не вариант... Елси просто не запустить макрос - его тело останется без изменений, и если в него влезть - можно просто убрать эту проверку и прога заработает. А влезть даже в запароленый макрос - не проблема... "спасибо" всяким прогам по открытию VBA паролей.
Не хочу показаться пессимистом, но:
1. Если юзер чайник, то навряд ли он может что-то изменить.
2. А если он маломальски в этом разбирается (по крайней мере, знает про программы, которые вскрывают VBA-пароли), то ему не составит труда вскрыть файл еще до того как закончится срок действия макросов или элементарно скопировать этот файл.

Тут на форуме тусуется человек, который продает VBA-пректы. У него бы поинтересоваться как их защищать, если это, конечно, не секретная информация. Кажется его MXAlex зовут или как-то так.

Может лучше тогда это дело на VB переписать?
...
Рейтинг: 0 / 0
Удаление макросом VBA себя самого или своего модуля
    #33646269
GoldenAxe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А можно с помощью 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 и продолжать работать из оперативной памяти?
...
Рейтинг: 0 / 0
Удаление макросом VBA себя самого или своего модуля
    #33646305
GoldenAxe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
k-nike
Не хочу показаться пессимистом, но:
1. Если юзер чайник, то навряд ли он может что-то изменить.
2. А если он маломальски в этом разбирается (по крайней мере, знает про программы, которые вскрывают VBA-пароли), то ему не составит труда вскрыть файл еще до того как закончится срок действия макросов или элементарно скопировать этот файл.

Тут на форуме тусуется человек, который продает VBA-пректы. У него бы поинтересоваться как их защищать, если это, конечно, не секретная информация. Кажется его MXAlex зовут или как-то так.

Может лучше тогда это дело на VB переписать?

Согласен, но согласитесь, чаще всего мы начинаем лезть в программу только тогда, когда она ломается... Мне например и нафиг не надо знать как работает чужой макрос, если он работает... я туда полезу только если меня что-то не устроит... На это я и расчитываю... что когда юзер будет пользовать мою прогу - она будет работать и мыслей туда лазить у него не возникнет, а когда истечет срок годности - и лазить будет некуда %))
По поводу написания такой проги на других языках - можно, но это будет уже 2 файла, один ехе и один xls(в котором всякие исходники для каждого конкретного запуска)... а это дополнительные трудности для распространения.
...
Рейтинг: 0 / 0
Удаление макросом VBA себя самого или своего модуля
    #33648520
Avtopic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Чем меньше будем верить умным советам, тем больше будем тратить драгоценное время:

White Owl GoldenAxeВНИМАНИЕ ВОПРОС!
Как программным методом (кодами в начале макроса) изменить параметры безопасности и установить соответствующую галочку?
Никак. Абсолютно.
White Owl GoldenAxeСлышал еще такое:
Что если проект имеет цифровую подпись MicroSoft то даже эта галочка не нужна, т.к. в таком случае Excel воспринемает эту прогу как "свою родную" и разрешает любые манипуляции с макросом самим макросом.
Нет.
"Подписаная" и сконвертированная в add-on книга сможет только запускать имеющиеся в ней макросы без требования к пользователю включить поддержку макросов для этой книги. Но модифицировать макросы она все равно не сможет если пользователь не разрешит.
...
Рейтинг: 0 / 0
Удаление макросом VBA себя самого или своего модуля
    #33652963
GoldenAxe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl GoldenAxeВНИМАНИЕ ВОПРОС!
Как программным методом (кодами в начале макроса) изменить параметры безопасности и установить соответствующую галочку?
Никак. Абсолютно.

Короче!
Все те, кто заявляет так категорично - могут отдыхать!
По поводу уровня защиты - программно поменять можно, только окно Экселя должно быть закрыто. Скрипт сюда выкладывать не буду (лично - могу послать)
По поводу галочки доверия доступа к VBA проектам - ставится и убирается программно "на раз" прямо на глазах пользователя и без его участия!!! И никаких гвоздей.
И вообще после пары дней усиленного штудирования литературы и хелпов к VBA могу сказать одно: ТАМ МОЖНО ВСЕ, ВПЛОТЬ ДО УНИЧТОЖЕНИЯ ВСЕХ ДИСКОВ ВКЛЮЧАЯ СИСТЕМНЫЙ!!!
А те, кто "где-то" "что-то" слышал про невозможность это сделать - ИДИТЕ ЛЕСОМ, УЧИТЕ МАТЧАСТЬ!!!
Мной написаны коды, которые могут по определенному условию уничтожать саму рабочую книгу, все модули и макросы в ней, даже если макрос защищен паролем! а также, в случае необходимости, уничтожать свои уцелевшие копии на этом компе и на компах в сети.
...
Рейтинг: 0 / 0
Удаление макросом VBA себя самого или своего модуля
    #33653160
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GoldenAxe White Owl GoldenAxeВНИМАНИЕ ВОПРОС!
Как программным методом (кодами в начале макроса) изменить параметры безопасности и установить соответствующую галочку?
Никак. Абсолютно.
Короче!
Все те, кто заявляет так категорично - могут отдыхать!
По поводу уровня защиты - программно поменять можно, только окно Экселя должно быть закрыто.Повнимательнее читай что сам пишешь.
Если окно Экселя закрыто. Еще надо было добавить: и если Эксель не висит в памяти в режиме горячего демона, то да можно будет поменять параметры безопасности не через меню Экселя.
Из макроса это сделать невозможно.

GoldenAxeПо поводу галочки доверия доступа к VBA проектам - ставится и убирается программно "на раз" прямо на глазах пользователя и без его участия!!! И никаких гвоздей.Можно? Правда? Показывай. Не хочешь публично - мой емыл в профайле есть :)
...
Рейтинг: 0 / 0
Удаление макросом VBA себя самого или своего модуля
    #33653722
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Как программным методом (кодами в начале макроса) изменить параметры безопасности и установить соответствующую галочку?
...
Рейтинг: 0 / 0
Удаление макросом VBA себя самого или своего модуля
    #33655102
GoldenAxe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[/quot]Можно? Правда? Показывай. Не хочешь публично - мой емыл в профайле есть :)[/quot]
Послал лично...
...
Рейтинг: 0 / 0
Удаление макросом VBA себя самого или своего модуля
    #33655441
GoldenAxe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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 можно поменять уровни безопасности, главное чтоб юзер хоть один раз запустил макрос...
...
Рейтинг: 0 / 0
Удаление макросом VBA себя самого или своего модуля
    #33656872
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GoldenAxeПослал лично...хм.....
Почти убедил.
Минусы твоего конкретного макроса:
- Не будет работать на Экселях других версий.
- Не будет работать на не русских Экселях.
Но в принципе, да. Если этот макрос разрешить хотя бы один раз - он сделает то что нужно.

Но главный минус - программная смена уровня безопасности потенциально вирусоопасна. Как только до твоего трюка додумается очередной кретин-вирусописатель этот трюк будет включен в базы антивирусов и твоя ЧЕСТНАЯ рабочая книга начнет считаться вирусом :)

Лучше всего, класть инструкцию по смене уровня безопасности в дистрибутив программы.
...
Рейтинг: 0 / 0
Удаление макросом VBA себя самого или своего модуля
    #33657499
GoldenAxe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl GoldenAxeПослал лично...хм.....
Почти убедил.
Минусы твоего конкретного макроса:
- Не будет работать на Экселях других версий.
- Не будет работать на не русских Экселях.
Но в принципе, да. Если этот макрос разрешить хотя бы один раз - он сделает то что нужно.

Но главный минус - программная смена уровня безопасности потенциально вирусоопасна. Как только до твоего трюка додумается очередной кретин-вирусописатель этот трюк будет включен в базы антивирусов и твоя ЧЕСТНАЯ рабочая книга начнет считаться вирусом :)

Лучше всего, класть инструкцию по смене уровня безопасности в дистрибутив программы.

Да, на счет минусов согласен, но ведь никаких проблем узнать версию Excel и Винды нет,

Sub ExcelVersion()

On Error Resume Next

Dim objShell
Dim vatReturn

Set objShell = CreateObject("WScript.Shell")

vatReturn = objShell.RegRead( _
"HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.Application\CurVer\")
MsgBox vatReturn

End Sub

Так же можно установить и версию Винды.

А на счет антивирусов - да, это к сожалению останется... но где наша не пропадала? %)) Найдем и как это обойти %)))
Главное таким "макаром" можно сделать очень многие полезные и не очень вещи %)))
...
Рейтинг: 0 / 0
Удаление макросом VBA себя самого или своего модуля
    #33657649
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GoldenAxe Мне НЕ НАДО воздействовать на другие файлы и программы, надо только "лицензировать" свою.Тоже приходится писать на VBA софт открытым текстом, так что о защите думал так же как и Вы. и пришел к тому, что скинул я весь код в ActiveX dll. Пишу код для CAD, а не для Excell. Но интерфес думаю будет похожий вот все манипуляции.
1)ActiveX DLL (project name SMELCAD см. GetInterfaceObject ниже) SmeLCAD.dll
В References нужно будет добавить все то для чего пишешь.
Код: plaintext
1.
2.
3.
4.
'MyClass.bas см. GetInterfaceObject ниже
Public Sub RunAny(ac As Object)
 PrintMessage ac,  32 
 ShellExecute  0 , "open", ac.Utility.getstring(False),  3 
End Sub
Данный код считывает текст введенный в CAD и запускает данный путь.
2)Макрос в CAD
Код: plaintext
1.
2.
3.
4.
5.
6.
Option Explicit
Dim VB6DLL As Object
Public Sub RUN()
   Set VB6DLL = ThisDrawing.Application.GetInterfaceObject("SMELCAD.MyClass")
   VB6DLL.RunAny ThisDrawing
End Sub
ThisDrawing в моем случае, это активное окно CAD.
...
Рейтинг: 0 / 0
Удаление макросом VBA себя самого или своего модуля
    #33658275
GoldenAxe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SmeL_md GoldenAxe Мне НЕ НАДО воздействовать на другие файлы и программы, надо только "лицензировать" свою.Тоже приходится писать на VBA софт открытым текстом, так что о защите думал так же как и Вы. и пришел к тому, что скинул я весь код в ActiveX dll. Пишу код для CAD, а не для Excell. Но интерфес думаю будет похожий вот все манипуляции.
1)ActiveX DLL (project name SMELCAD см. GetInterfaceObject ниже) SmeLCAD.dll
В References нужно будет добавить все то для чего пишешь.
Код: plaintext
1.
2.
3.
4.
'MyClass.bas см. GetInterfaceObject ниже
Public Sub RunAny(ac As Object)
 PrintMessage ac,  32 
 ShellExecute  0 , "open", ac.Utility.getstring(False),  3 
End Sub
Данный код считывает текст введенный в CAD и запускает данный путь.
2)Макрос в CAD
Код: plaintext
1.
2.
3.
4.
5.
6.
Option Explicit
Dim VB6DLL As Object
Public Sub RUN()
   Set VB6DLL = ThisDrawing.Application.GetInterfaceObject("SMELCAD.MyClass")
   VB6DLL.RunAny ThisDrawing
End Sub
ThisDrawing в моем случае, это активное окно CAD.

Да, такой вариант существует, но сложность в том, что проги я пишу для ламеров, которым будет сложно объяснить наличие ДВУХ файлов вместо одного и обязательность прописывания dll-библиотеки...
...
Рейтинг: 0 / 0
Удаление макросом VBA себя самого или своего модуля
    #33658353
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А инсталляторы для чего придума :) ?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Удаление макросом VBA себя самого или своего модуля
    #34891697
Torquader
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Собственно, если галочка на форме, то что мешает открыть эту форму, кинуть туда эту галочку, а потом закрыть. Да на Vasic-е это не так-то просто, но с помощью WinApi почти любое приложение сдаётся на ура.
Как вариант - записать тело EXE-файла внутрь Макроса, а потом, когда надо - сложить на диск и запустить. Пользователь увидит, что что-то мелькнуло на экране - и ВСЁ.
...
Рейтинг: 0 / 0
Удаление макросом VBA себя самого или своего модуля
    #35424728
marmihalovna
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Артем GИнтересно... раз мешает пароль может на каком то этапе его прогрмно убрать?

White Owl GoldenAxeВНИМАНИЕ ВОПРОС!
Как программным методом (кодами в начале макроса) изменить параметры безопасности и установить соответствующую галочку?
Никак. Абсолютно.

убрать пароль на какомто этапе возможно, как потом закрыть доступ к открытому проекту - ВОТ ТРАБЛ, его надо либо выгрузить без закрытия кнаги при помощи какой нибудь функции обратной Getobject либо перезапустить VBAProject также без закрытия кнаги

Я тоже хочу защитить свои авторские права как и задумка таже

GoldenAxeЯ НЕ ПИШУ ВИРУСЫ, дело в том, что я продаю свои мелкие программки на VBA и хочу защитить свои авторские права. Мне надо чтобы после определенной даты или после определенного кол-ва запуска программы она удаляла сама себя. Мне НЕ НАДО воздействовать на другие файлы и программы, надо только "лицензировать" свою.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Удаление макросом VBA себя самого или своего модуля
    #36130251
haria
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Граждане, а готового решения так ни у кого и не появилось?
...
Рейтинг: 0 / 0
Удаление макросом VBA себя самого или своего модуля
    #36130452
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: haria
> Граждане, а готового решения так ни у кого и не появилось?

Да какое решение, всю защиту можно снять и посмотреть програмный код не открывая файл!
Какое решение вы хотите?
Удалить модуль, я думаю можно, сам удалять не пробовал, только добавлял, но для этого нужно поставить птицу доверять
доступ к Visual Basic Project, поле этого только можно что-то делать програмно с кодом и то, после пререзапуска екселя.
Т.е. что-то должно поменять значение в реестре до запуска макросов, переоткрыть ексель и запустить макрос. Не вижу
проблем. Делайте, расказывайте о результатах, удачи!


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Удаление макросом VBA себя самого или своего модуля
    #36130486
haria
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Игорь Горбонос,
В том то и дело - от асов не защитишся, да и незачем - надо будет, и сами напишут, что им нужно. главное - от "умного" юзера защитить.
...
Рейтинг: 0 / 0
Удаление макросом VBA себя самого или своего модуля
    #36538024
boa_KAA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может не вовремя :), но просмотрев тему и не увидев конкретного решения решил предложить своё:

GoldenAxeНО!!! если Excel закрыт - то поменяв этот параметр при следующем запуске Excel галочка ПОЯВЛЯЕТСЯ!!! Т.е. надо чтоб скрипт сработал при закрытом Экселе!!! Как это можно сделать? Может макрос закрыть Excel и продолжать работать из оперативной памяти?

При запуске Эксел считывает данные из реестра, т.е.
1. запускаем Эксель
2.Разрешаем макросы и меняем доверие к проэктам ВБА в реестре
3. Запускаем новое окно Экселя, после чего текущее можно закрыть.
программно где-то так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
Sub pop()
' Меняем доверие  к проектам VBA и уровень безопасности
Dim i As Integer, objExcel As Object, objShell As Object, vatDir As String, vatReturn As Currency, _
Papka As String, AppExcel As Excel.Application

On Error Resume Next

'   Версия Excel: 9.0 - 2000, 10.0 - 2002, 11.0 - 2003 и т.д.
Set objExcel = CreateObject("Excel.Application")
Set objShell = CreateObject("WScript.Shell")

For i =  0  To  50 
On Error GoTo  150 
vatDir = objShell.RegRead( _
"HKEY_CURRENT_USER\Software\Microsoft\Office\" & objExcel.Version & "\Excel\Security\Trusted Locations\Location" & i & "\Path")
'On Error Resume Next
If vatDir = ThisWorkbook.Path Then Exit For
If i <  0  Then
 150  objShell.RegWrite _
    "HKEY_CURRENT_USER\Software\Microsoft\Office\" & objExcel.Version & "\Excel\Security\Trusted Locations\Location" & i & "\Description", "Назовите сами", "REG_SZ"  'прописывает доверительную директорию для Excel 2007 и выше.
    objShell.RegWrite _
    "HKEY_CURRENT_USER\Software\Microsoft\Office\" & objExcel.Version & "\Excel\Security\Trusted Locations\Location" & i & "\AllowSubfolders",  1 , "REG_DWORD"
    objShell.RegWrite _
    "HKEY_CURRENT_USER\Software\Microsoft\Office\" & objExcel.Version & "\Excel\Security\Trusted Locations\Location" & i & "\Path", ThisWorkbook.Path, "REG_SZ"
    'разрешение доступа к сетевым папкам
    objShell.RegWrite _
"HKEY_CURRENT_USER\Software\Microsoft\Office\" & objExcel.Version & "\Excel\Security\Trusted Locations\AllowNetworkLocations",  1 , "REG_DWORD"
Exit For
End If
Next


On Error GoTo  200 
vatReturn = objShell.RegRead( _
"HKEY_CURRENT_USER\Software\Microsoft\Office\" & objExcel.Version & "\Excel\Security\AccessVBOM")

If vatReturn =  0  Then
    '   За доверительный доступ к проектам VBA отвечает параметр "AccessVBOM"
 200  objShell.RegWrite _
    "HKEY_CURRENT_USER\Software\Microsoft\Office\" & objExcel.Version & "\Excel\Security\AccessVBOM",  1 , "REG_DWORD"
    '   За уровень безопасности отвечает параметр "Level"
    objShell.RegWrite _
    "HKEY_CURRENT_USER\Software\Microsoft\Office\" & objExcel.Version & "\Excel\Security\Level",  1 , "REG_DWORD"
    
End If

    Set AppExcel = New Excel.Application '
    AppExcel.Visible = True
    AppExcel.Workbooks.Open(Filename:="Ваш файл").RunAutoMacros Which:=xlAutoOpen
    Excel.Application.Quit

End Sub

...
Рейтинг: 0 / 0
Удаление макросом VBA себя самого или своего модуля
    #36948390
LLeonid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
boa_KAA,
Подскажите, пожалуйста, каким образом макрос вообще начнет запускаться, если установлен высокий уровень безопасности?
...
Рейтинг: 0 / 0
Удаление макросом VBA себя самого или своего модуля
    #36950792
.Михаил.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GoldenAxe, на сколько я помню, на проект VBA в Excel можно поставить пароль, т.е. без него нельзя посмотреть и изменить код макроса. Вот в таком "защищенном" коде и делайте различные проверки. Хотя не знаю, может этот пароль уже давно взламывают.
...
Рейтинг: 0 / 0
Удаление макросом VBA себя самого или своего модуля
    #37014331
LLeonid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GoldenAxe, спасибо за код, отправленный мне на Email, все работает: галочка в "Доверять доступ к VBP" ставится, макрос сам себя удаляет.
Минус: если код разместить в книге для выполнения при открытии, ругается антивирус (McAfee), но это можно обойти.
...
Рейтинг: 0 / 0
Удаление макросом VBA себя самого или своего модуля
    #37014364
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я так понял макросы написанные на ВБА, можно сохранить в .dll, её через Референс добавит и пользоваться
Это сложно?? Есть где примеры, почитать??
...
Рейтинг: 0 / 0
Удаление макросом VBA себя самого или своего модуля
    #37272157
Vlad_k9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GoldenAxe, если не сложно, прошу выслать код макроса, кот. ставит "галочку" на доверии к проектам, что позволит немножко защитить свои авторские права. Позарез нужно ...
...
Рейтинг: 0 / 0
Удаление макросом VBA себя самого или своего модуля
    #37272182
Ципихович Эндрю
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да что уж, если не сложно на всеобщее обозрение
...
Рейтинг: 0 / 0
Удаление макросом VBA себя самого или своего модуля
    #37273302
Vlad_k9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как вариант, с некоторыми недостатками:
- привязка к имени,
- Каспер матюкается...
...
Рейтинг: 0 / 0
Удаление макросом VBA себя самого или своего модуля
    #37273306
Vlad_k9
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно обрезать, удалив Module2, кот. собственно говоря, для наглядности + закомментировать "Exit".
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Удаление макросом VBA себя самого или своего модуля
    #38731325
rubberman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GoldenAxe,
А что если файл сохранить в каком-нибудь древнем формате, например в xlExcel4 (проект VBA точно не перенесет этого).
У меня получилось подобное сделать только в Excel2003 - ничего не осталось и "доступ к Visual Basic Project" был не разрешен.
Код такой (я сам тот ещё дилетант, так что любые исправления и дополнения охотно и с благодарностью принимаю):

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
'удаляем всё что можно и сохраняем (мой формат .xls / 2003), в т.ч. DisplayAlerts отключены
	'...
	On Error Resume Next: Err.Clear
        ThisWorkbook.Save
' сохраняем в формате Excel 4.0 и закрываем книгу
	oldName$ = ActiveWorkbook.FullName
        newname$ = oldName$
        ThisWorkbook.SaveAs newname$, xlExcel4
        If Err <> 0 Then Kill oldName$
        ThisWorkbook.Close False



Помогите пожалуйста, сделать код который будет работать от Excel2003 и выше. Основная идея - оставить пустой файл.

Спасибо!
...
Рейтинг: 0 / 0
Удаление макросом VBA себя самого или своего модуля
    #38733167
1001
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rubberman....
.Основная идея - оставить пустой файл.
Спасибо!
о
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Удаление макросом VBA себя самого или своего модуля
    #39663178
МГ_К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GoldenAxe,
Здравствуйте!

Нахожусь в положении, близком к Вашему.
Единственная разница - хочу уничтожить документ Xlam по истечении срока лицензии или переносе на другой комп.

Не могли бы выслать свой код для уничтожения Документа и/или его страниц и кодов?

С Благодарностью

М.К.

PS Прошёл к Вам со страницы http://www.sql.ru/forum/278951/udalenie-makrosom-vba-sebya-samogo-ili-svoego-modulya
PPS А как Вам приём, предложенный пользователем Vlad_k9?
...
Рейтинг: 0 / 0
Удаление макросом VBA себя самого или своего модуля
    #39663276
МГ_К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А как запустить простой макрос из простого модуля, а не тот, который на WorkBook_Open?
...
Рейтинг: 0 / 0
47 сообщений из 47, показаны все 2 страниц
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Удаление макросом VBA себя самого или своего модуля
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]