Как удалить модуль в vba excel
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
НО.
Все эти коды выполняются ТОЛЬКО с установленной галочкой «Доверять доступ к Visual Basic Project» («Trust access to Visual Basic Project») в параметрах безопасности макросов.
ВНИМАНИЕ ВОПРОС!
Как программным методом (кодами в начале макроса) изменить параметры безопасности и установить соответствующую галочку?
Я НЕ ПИШУ ВИРУСЫ, дело в том, что я продаю свои мелкие программки на VBA и хочу защитить свои авторские права. Мне надо чтобы после определенной даты или после определенного кол-ва запуска программы она удаляла сама себя. Мне НЕ НАДО воздействовать на другие файлы и программы, надо только "лицензировать" свою.
Была еще такая идея:
После проверки даты или кол-ва запусков, в случае привышения макрос сохраняет свой же файл в формате Excel 3.0, который не может содержать макросов. Идея прекрасно воплощяется в жизнь, но только если сам макрос не защищен паролем! Может как-то развить это направление?
Слышал еще такое:
Что если проект имеет цифровую подпись MicroSoft то даже эта галочка не нужна, т.к. в таком случае Excel воспринемает эту прогу как "свою родную" и разрешает любые манипуляции с макросом самим макросом. Для этого надо всего-лишь подписаться цифровым сертификатом MS. Кто-нибудь знает как это сделать? Тем более что прога по присвоению сертификатов находится в стандартной комплектации Офиса.
За доверительный доступ отвечает параметр "AccessVBOM" того же раздела.
За доверительный доступ отвечает параметр "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
Делаете в VB6 ActiveX Dll.
В нем пишете код для макроса.
регистрируете Dll в системе.
затем в Excel подключаете эту dll, и запускаете в ней процедуру с вашим кодом.
А в самой dll можно втыкать любые проверки на исполнение макроса, подломать их будет достаточно сложно.
Делаете в VB6 ActiveX Dll.
В нем пишете код для макроса.
регистрируете Dll в системе.
затем в Excel подключаете эту dll, и запускаете в ней процедуру с вашим кодом.
А в самой dll можно втыкать любые проверки на исполнение макроса, подломать их будет достаточно сложно.
см аттач.
Делаете в VB6 ActiveX Dll.
В нем пишете код для макроса.
регистрируете Dll в системе.
затем в Excel подключаете эту dll, и запускаете в ней процедуру с вашим кодом.
А в самой dll можно втыкать любые проверки на исполнение макроса, подломать их будет достаточно сложно.
см аттач.
Это довольно сложно. в смысле заставить юзверя сначала Dll регистрировать . дело в том, что изначальная задача — упростить жизнь простым смертным, которые не знают даже как поменять уровень безопасности, ну а как прописать dll в систему им точно не по-зубам.
Да это как раз не вариант. Елси просто не запустить макрос — его тело останется без изменений, и если в него влезть — можно просто убрать эту проверку и прога заработает. А влезть даже в запароленый макрос — не проблема. "спасибо" всяким прогам по открытию VBA паролей.
Не хочу показаться пессимистом, но:
1. Если юзер чайник, то навряд ли он может что-то изменить.
2. А если он маломальски в этом разбирается (по крайней мере, знает про программы, которые вскрывают VBA-пароли), то ему не составит труда вскрыть файл еще до того как закончится срок действия макросов или элементарно скопировать этот файл.
Тут на форуме тусуется человек, который продает VBA-пректы. У него бы поинтересоваться как их защищать, если это, конечно, не секретная информация. Кажется его MXAlex зовут или как-то так.
Вот еще:
Я писал что с помощью ключа
objShell.RegWrite _
"HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Excel\Security\AccessVBOM", _
1, "REG_DWORD"
Тут на форуме тусуется человек, который продает VBA-пректы. У него бы поинтересоваться как их защищать, если это, конечно, не секретная информация. Кажется его MXAlex зовут или как-то так.
Может лучше тогда это дело на VB переписать?
Set prj = Excel.Application.VBE
А если потом передумал, то конечно, компьютер работает под программу, и разные вирусы пишутся как обыкновенные программы, и форматирование идет программно, Но все это, не изменение уровня зашиты в Excele с помощью кода VBA
Set prj = Excel.Application.VBE
А если потом передумал, то конечно, компьютер работает под программу, и разные вирусы пишутся как обыкновенные программы, и форматирование идет программно, Но все это, не изменение уровня зашиты в Excele с помощью кода VBA
О чем писал автор:
GoldenAxe |
Как программным методом (кодами в начале макроса) изменить параметры безопасности и установить соответствующую галочку? |
Но главный минус — программная смена уровня безопасности потенциально вирусоопасна. Как только до твоего трюка додумается очередной кретин-вирусописатель этот трюк будет включен в базы антивирусов и твоя ЧЕСТНАЯ рабочая книга начнет считаться вирусом 🙂
VBA Excel. Модуль (импорт, экспорт, удаление)
Импорт, экспорт и удаление модуля в редакторе VBA. Импорт модуля для загрузки процедур (подпрограмм и функций) в рабочую книгу Excel или Личную книгу макросов.
Импорт модуля
1. Откройте рабочую книгу Excel, в которую планируете импортировать модуль. Для импорта модуля в Личную книгу макросов, откройте любую книгу.
2. Откройте редактор VBA сочетанием клавиш Alt+F11 (в этом сочетании используется левая клавиша Alt). Обратите внимание на наличие в окне редактора VBA окна проводника «Project-VBAProject», обычно, расположенного слева. При отсутствии, отобразите его через главное меню, выбрав «View» – «Project Explorer».
3. В окне проводника «Project-VBAProject» найдите строку «VBAProject (ИмяКниги)», где «ИмяКниги» – это имя книги, в которую вы собираетесь импортировать модуль. Если вы желаете импортировать модуль в Личную книгу макросов, строка называется «VBAProject (PERSONAL.XLSB)». Если у вас нет Личной книги макросов – создайте ее.
4. У выбранной строки раскройте все крестики слева.
5. Откройте контекстное меню, кликнув правой кнопкой мыши на строке «ЭтаКнига», и выберите в нем пункт «Import File…».
6. В открывшемся окне выбора файла найдите импортируемый модуль с расширением .bas и дважды кликните по нему, или кликните один раз и нажмите кнопку «Открыть». Модуль импортирован и отобразился в проводнике под именем «Module» с очередным номером, независимо от имени импортируемого файла.
7. Если вы импортировали модуль в Книгу Excel 2007-2016 с расширением .xlsx, ее необходимо будет пересохранить как «Книга Excel с поддержкой макросов (.xlsm)», иначе импортированный модуль не сохранится.
Инструкцию с картинками вы можете посмотреть здесь в параграфе «Пользовательская функция «СуммаПрописью».
Экспорт модуля
1. Откройте рабочую книгу Excel, из которой вы планируете экспортировать модуль. Для экспорта модуля из Личной книги макросов, откройте любую книгу.
2. Откройте редактор VBA сочетанием клавиш Alt+F11 и в окне проводника «Project-VBAProject» найдите экспортируемый модуль.
3. Откройте контекстное меню, кликнув правой кнопкой мыши на экспортируемом модуле, и выберите в нем пункт «Export File…».
4. В открывшемся окне выберите папку, куда следует сохранить экспортируемый модуль, если необходимо, измените название сохраняемого файла, и нажмите кнопку «Сохранить». Модуль экспортирован и отобразился в выбранном каталоге с указанным именем и расширением .bas.
Удаление модуля
1. В окне проводника «Project-VBAProject» найдите удаляемый модуль.
2. Откройте контекстное меню, кликнув правой кнопкой мыши на удаляемом модуле, и выберите в нем пункт «Remove Module…» с номером удаляемого модуля.
3. VBA Excel предложит экспортировать модуль перед удалением, нажмите «Да», если хотите сохранить модуль, или «Нет», чтобы удалить без сохранения.