powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Удаление макросом VBA себя самого или своего модуля
22 сообщений из 47, страница 2 из 2
Удаление макросом 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
22 сообщений из 47, страница 2 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Удаление макросом VBA себя самого или своего модуля
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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