Страницы: 1
RSS
Можно ли сделать макрос с ограниченным периодом жизни? И как его защитить?
 
Есть записанный макрос с открытым кодом, в данный момент любой может открыть и отредактировать его. Как можно защитить макрос и как, если такое возможно, сделать его ограниченным по использованию? Т.е. грубо говоря год, после этого перестал бы запускаться/корректно работать.
Изменено: zaolog - 28.03.2017 20:51:23
 
Цитата
zaolog написал:
любой может открыть и отредактировать его
Цитата
zaolog написал:
Как можно защитить макрос
Вы хочете странного... И не просто странного, а очень сильно странного!  :D
 
Цитата
RAN написал:
Вы хочете странного... И не просто странного, а очень сильно странного!  
Почему же? Есть другие варианты, но они мне не подходят.
Варианты такие:
Код
*******************
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
Изменено: zaolog - 28.03.2017 21:19:09
 
Странность в том, что разрешаете всем все редактировать и при этом хотите защиты. Защита - это когда разрешать, но не все.
 
думаю речь идет о пароле на проект VBA
 
Цитата
zaolog написал:
Есть другие варианты, но они мне не подходят.
А вот тут ничего странного.
До момента запуска любого из перечисленных макросов, любой копирует исходный код в любое место, а там трава не расти...
 
Цитата
zaolog написал: любой может открыть и отредактировать его
Пусть себе редактируют на здоровье
Invisible Basic - обфускатор кода
Согласие есть продукт при полном непротивлении сторон
 
Цитата
vikttur написал:
Странность в том, что разрешаете всем все редактировать и при этом хотите защиты. Защита - это когда разрешать, но не все
Разработчик изначально не я. И поэтому в нем не стоит никакой защиты.
Цитата
Sanja написал:
думаю речь идет о пароле на проект VBA
Говорят их можно легко взломать, сам не проверял
 
Я про пароли не говорил
Повторю - Обфускатор кода, ссылка выше
Согласие есть продукт при полном непротивлении сторон
 
Как защитить проект VBA паролем
Как удалить книгу из самой себя
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
zaolog написал:
Есть другие варианты, но они мне не подходят.
Вы бы объяснили, почему не подходит ни один из показанных вариантов.
===
Ещё вариант: после открытия книги макрос проверяет дату, если она просрочена, макрос выполняет операцию "Сохранить как" (книга без поддержки макросов -xlsx), а потом удаляет исходную книгу.
 
Цитата
zaolog написал: Как можно защитить макрос
Цитата
The_Prist написал:  Как защитить проект VBA паролем
Как бы не вижу проблемы в формулировании вопроса.
Цитата
zaolog написал: с ограниченным периодом жизни
Цитата
Юрий М написал: Как удалить книгу из самой себя
Вот тут спасибо, т.к. не знал как это правильно описать.
Макросы приходилось дорабатывать и исправлять на элементарном уровне, пока только поверхностные знания, от того и проблемы с вопросами.
Цитата
Юрий М написал: после открытия книги макрос проверяет дату, если она просрочена, макрос выполняет операцию "Сохранить как" (книга без поддержки макросов -xlsx), а потом удаляет исходную книгу.
Интересное решение, это как раз то что нужно.
 
Не очень разобрался в Вашем цитировании - Вы меня протицировали, но ответ был неясно в какую степь от цитаты :)
По части защиты проекта паролем - советую все же сходить по ссылке - я там программу выкладывал, которая позволяет защитить VBA-проект чуть более надежно. Стандартными прогами по взлому проекта такую защиту не взломать.

P.S. По части сохранить как - без поддержки макросов, советую учесть версию Excel. Если файл откроют в 2003 - будет тупо ошибка кода и ничего более. Это так, на всякий случай(мы же файл не видели).
Изменено: The_Prist - 29.03.2017 11:36:49
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
ОФФ.
Цитата
zaolog написал: Макросы ... на элементарном уровне, пока только поверхностные знания...
Дело не мое, конечно, но озаботиться защитой макросов настанет пора тогда, когда уровень вырастет как минимум до профессионального, и использование макросов будет возможно в коммерческих целях.
Что сейчас в них такого секретного/крутого, что требуется их защита? Наоборот, дайте их на растерзание пользователям. Пусть они их в краш-режиме попользуют. А Вы, исправля вылезающие ошибки, научитесь писать код с защитой от 'дурака' сразу.
Повторю - мое личное мнение, обидеть никого не хотел
Согласие есть продукт при полном непротивлении сторон
 
Макрос простой до жути, как могут сказать более опытные коллеги. Но он очень сильно упрощает жизнь.
Мне пришлось его изменять и дорабатывать, т.к. были найдены ошибки. А его разработчик не мог дать совета, т.к. к этому времени уже не занимался этим.
Код
Sub Новая_проба()
'
' Новая_проба Макрос
' Макрос записан 28.11.2006 (Sergey) и исправлен 2016 (Vladimir)
'
'Активизация листа с данными о пробе
    Sheets("Исходные данные").Select
    
'Вывод формы данных об объеме пробы
    ActiveSheet.ShowDataForm
    
'Макрос замены точки на запятую()
    Range("A2:E2").Select
    Selection.Replace What:=".", Replacement:=","
    
'Раскрытие Исходного листа
    Sheets("Исходный").Visible = True
'Копирование Исходного
    Sheets("Исходный").Copy Before:=Sheets(1)
'Сокрытие Исходного листа
    'Sheets("Исходный").Visible = False
'Переименование копии листа
    Sheets("Исходный (2)").Select
    Sheets("Исходный (2)").Name = "Новая проба"
    
'Снятие защиты с листа
    ActiveSheet.Unprotect
'Скрытие расчетных столбцов
    Columns("E:X").Select
    Selection.EntireColumn.Hidden = True
    
'Защита листа
    ActiveSheet.Protect

'Вывод формы данных
    ActiveSheet.ShowDataForm

'Снятие защиты с листа
    ActiveSheet.Unprotect
    
'Макрос замены точки на запятую()
    Range("C1:D723").Select
    Selection.Replace What:=".", Replacement:=","
   
'Замена формул по численности и биомассе числовыми данными
    Range("G1:K723").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=False
    
'Замена формул индексов  и продукции числовыми данными
    Range("B726:B742").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=False
    
'Удаление расчетных колонок
    Columns("L:X").Select
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlToLeft
    
'Удаление колонок кода и первичной численности
    Columns("C:F").Select
    Application.CutCopyMode = False
    Selection.Delete Shift:=xlToLeft

'Скрытие незаполненных строк
    For N = 2 To 724
        If Cells(N, 4) = 0 Then Rows(N).Hidden = True
    Next
    
'Формирование окончательного вида пробы путем
'раскрытия рассчитанных столбцов
    Columns("C:G").Select
    Selection.EntireColumn.Hidden = False
    Range("A1").Select

'Формирование предупреждающего сообщения и
'преименование пробы
    Dim SheetName As String
    Do
    SheetName = InputBox("Введите название новой пробы:")
    Loop While SheetName = ""
    ActiveSheet.Name = SheetName

'Защита листа
    ActiveSheet.Protect
End Sub

Цитата
Sanja написал: Повторю - мое личное мнение, обидеть никого не хотел
Это нисколько и не обижает. Спасибо.
Изменено: zaolog - 29.03.2017 13:37:20
Страницы: 1
Наверх