Ограничение количества запусков файла.

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

AleX70
Сообщения: 4
Зарегистрирован: 25 июл 2007, 21:17

Ребята помогите решить такую задачу!
Как средствами VBA ограничить количество запусков или использование до определенной даты файла Excel.
Было бы идеально, если этот файл уничтожался после временного ограничения.
Помогите с кодом, в VBA я не силен :(
Pavel55
Сообщения: 418
Зарегистрирован: 20 окт 2006, 11:40
Откуда: Moscow

Точно не знаю, но можно попробывать такое
Внимание!!! Тестировать макрос на НЕНУЖНОМ файле. Макрос удалит файл

Код: Выделить всё

Private Sub ExpirationDate()
'ВНИМАНИЕ !!!!
'ТЕСТИРОВАТЬ НА НЕНУЖНОМ ФАЙЛЕ
'ФАЙЛ САМ УДАЛИТЬСЯ, ЕСЛИ ДАТА В КОДЕ БУДЕТ РАНЬШЕ, ЧЕМ СЕГОДНЯШНЯЯ

    If Date >= #8/1/2007# Then 'месяц/число/год -  1 Августа 2007г.
        iFullName$ = ActiveWorkbook.FullName
        Application.DisplayAlerts = False
        ActiveWorkbook.ChangeFileAccess Mode:=xlReadOnly
        Application.DisplayAlerts = True
        SetAttr iFullName$, vbNormal: Kill iFullName$
        ActiveWorkbook.Close saveChanges:=False
    End If
End Sub
Ну. и соответственно, надо закрыть код для просмотра и поставить пароль, чтобы никто заранее не посмотрел код.

P.S. идея взята с http://www.progz.ru/forum/index.php?showtopic=28144
AleX70
Сообщения: 4
Зарегистрирован: 25 июл 2007, 21:17

Спасибо!
Работает.
Аватара пользователя
Ser Artur
Сообщения: 82
Зарегистрирован: 24 май 2005, 16:32

AleX70 джан огромное спасибо ВАМ ВЫ настоящий волшебник и добрая душа
Ser Artur
AleX70
Сообщения: 4
Зарегистрирован: 25 июл 2007, 21:17

Так и не понял, спасибо то за что?
Pavel55 - вот кудесник!
А я только вопрос поднял.
Удачи и спасибо всем.
Pavel55
Сообщения: 418
Зарегистрирован: 20 окт 2006, 11:40
Откуда: Moscow

Кудесник Pashulka (тот, кто его знает, а я думаю, кто занимается VBA его знают хорошо, жалко, что он перестал сюда заходить((((), а я просто перекопировал его код сюда ;)
Аватара пользователя
Ser Artur
Сообщения: 82
Зарегистрирован: 24 май 2005, 16:32

Пардон я извиняюсь. Грех не знать этого великолепного человека.
Ser Artur
sergiksergik
Сообщения: 3
Зарегистрирован: 26 янв 2009, 21:41

А как сделать чтобы после нескольких запусков файл удалялся ... Например после третьего...
Аватара пользователя
AlexZZZ
Сообщения: 237
Зарегистрирован: 01 июн 2007, 00:27
Откуда: Москва и область

Очень просто: поместить в ячейку, например, "A1" на "Лист1" счётчик открытий файла.
Для этого в модуль книги ("ЭтаКнига") помещаем тот же, но слегка модифицированный код:

Код: Выделить всё

Private Sub Workbook_Open()
'ВНИМАНИЕ !!!!
'ТЕСТИРОВАТЬ НА НЕНУЖНОМ ФАЙЛЕ
'ФАЙЛ САМ УДАЛИТЬСЯ, ЕСЛИ НА "Лист1" В ЯЧЕЙКЕ "A1" ЗНАЧЕНИЕ БОЛЬШЕ 3 

'Счётчик открытий
ThisWorkbook.Worksheets("Лист1").Range("A1").Value = _
ThisWorkbook.Worksheets("Лист1").Range("A1").Value + 1
 ThisWorkbook.Save
 Dim iFullName$
    If ThisWorkbook.Worksheets("Лист1").Range("A1").Value > 3 Then 'Если в счётчике больше 3-х запусков
        iFullName$ = ActiveWorkbook.FullName
        Application.DisplayAlerts = False
        ActiveWorkbook.ChangeFileAccess Mode:=xlReadOnly
        Application.DisplayAlerts = True
        SetAttr iFullName$, vbNormal: Kill iFullName$
        ActiveWorkbook.Close saveChanges:=False
    End If
End Sub
Для надёжности сам "Лист1" можно сделать скрытым.
Правда, если файл защищён от записи или открывается, например, напрямую из почтовой программы или с CD или DVD диска, этот код работать не будет. То же самое, если пользователь отключит макросы. Правда во втором случае можно заставить его это сделать, показывая нужные листы только при включённых макросах.
sergiksergik
Сообщения: 3
Зарегистрирован: 26 янв 2009, 21:41

Спасибо.
AlexZZZ писал(а):То же самое, если пользователь отключит макросы. Правда во втором случае можно заставить его это сделать, показывая нужные листы только при включённых макросах.
Но немного не понял. Объясните как это...
Спсб.
Ответить