Страницы: 1
RSS
Самоуничтожение файла ексель
 
Здравствуйте, подскажите как можно сделать что бы екселевский файл после определенного времени уничтожал все сохраненные в нем данные , и вообще возможно ли это. это связано с тем что есть люди с которыми не хочется делится наработками , а начальство заставляет сделать обратное. в файле сохраняется вбитый расчет который переносится в ворд , и после расчета этот файл будет не нужет.  
 
Заранее благодарен всем кто поможет.
 

http://www.planetaexcel.ru/forum.php?thread_id=9075 <BR>http://www.planetaexcel.ru/forum.php/forum.php?thread_id=10968&page_forum=1&allnum_forum=33 <BR>http://forum.msexcel.ru/microsoft_excel/makros_chto_by_isportit_fayl_excel_2003_o­t_kolva_otkrytiy-t2822.0.html;msg15488#msg15488

 
В модуль объекта ЭтаКнига того файла, содержимое которого надо убить, помещаем следующий код. В коде исправляем "18.06.2010" на любую нужную дату. При открытии книги идет проверка, и если текущая дата больше либо равна заданной происходит очистка всего на всех листах.    
Файл должен быть сохранен с поддержкой макросов и, соответственно, макросы должны быть разрешены в настройках Excel.  
 
Sub Workbook_Open()  
'Kill_Them_All  
Dim DateToKill As Variant  
Dim CurrDate As Variant  
Dim WS As Worksheet  
   CurrDate = Date  
   DateToKill = DateValue("18.06.2010")  
   Set WS = Sheets(1)  
If DateToKill <= CurrDate Then  
   For Each WS In Worksheets  
       WS.Cells.Clear  
   Next WS  
End If  
Range("A1").Select  
End Sub
 
Не получается, подскажи пож-ста  "В модуль объекта" - куда это
 
Пытливый , прошу прощения , ошибся сообщение сверху отправил я , там прекрепил файл , который хочу убить.
 
открываем нужный файл  
давим Alt+F11 откроется окно редактора VBA  
Слева вверху ищем в виде иерархического списка свой файл. Он будет состоять из списка объектов в файле. Например лист1, лист2 и, в том числе объект "ЭтаКнига" (ThisWorkbook)  
Два раза щелкаем мышью на название объекта - откроется окно кода объекта (бОльшая часть экрана редактора справа вверху)  
в этом окне кода вставляем мою писанину.
 
{quote}{login=Пытливый}{date=18.06.2010 08:21}{thema=}{post}открываем нужный файл  
давим Alt+F11 откроется окно редактора VBA  
Слева вверху ищем в виде иерархического списка свой файл. Он будет состоять из списка объектов в файле. Например лист1, лист2 и, в том числе объект "ЭтаКнига" (ThisWorkbook)  
Два раза щелкаем мышью на название объекта - откроется окно кода объекта (бОльшая часть экрана редактора справа вверху)  
в этом окне кода вставляем мою писанину.{/post}{/quote}  
 
Спасибо большое , все получилось.
 
Удаление рабочей книги после определенной даты, минуя корзины  
 
Sub Workbook_Open()  
If Date <= #12/31/2004# Then Exit Sub  
MsgBox "Сейчас рабочая книга будет удалена!"  
With ThisWorkbook  
.Saved = True  
.ChangeFileAccess xlReadOnly  
Kill .FullName  
.Close False  
End With  
End Sub
 
{quote}{login=FvR}{date=18.06.2010 10:22}{thema=}{post}Удаление рабочей книги после определенной даты, минуя корзины  
 
Sub Workbook_Open()  
If Date <= #12/31/2004# Then Exit Sub  
MsgBox "Сейчас рабочая книга будет удалена!"  
With ThisWorkbook  
.Saved = True  
.ChangeFileAccess xlReadOnly  
Kill .FullName  
.Close False  
End With  
End Sub{/post}{/quote}  
 
Вот это тема
 
Ну раз уж так, то лучше это делать на закрытие книги. Никто не поймет и не будет попыток восстановить файл.
Я сам - дурнее всякого примера! ...
 
KukIP, т.е. так?  
 
Sub Workbook_Close()  
If Date <= #12/31/2004# Then Exit Sub  
With ThisWorkbook  
.Saved = True  
.ChangeFileAccess xlReadOnly  
Kill .FullName  
.Close False  
End With  
End Sub
 
Прикольно... Может и пригодиться...  
Правда, почему-то у меня срабатывает только в пошаговом режиме... А когда закрываю файл просто по "крестику" - нет.  
Вообще не понимаю, как код ВБА, находящийся и выполняемый в файле, может убить этот файл?
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
{quote}{login=Alex_ST}{date=21.06.2010 02:39}{thema=}{post}Вообще не понимаю, как код ВБА, находящийся и выполняемый в файле, может убить этот файл?{/post}{/quote}А время жизни переменной? Вот она есть - бац, вот её нет :-)))
 
попробуйте так:  
Sub Sub Workbook_BeforeClose()  
If Date <= #12/31/2004# Then Exit Sub  
With ThisWorkbook  
.Saved = True  
.ChangeFileAccess xlReadOnly  
Kill .FullName  
.Close False  
End With  
End Sub
Живи и дай жить..
 
а насчет как..  для этого там и оператор .ChangeFileAccess xlReadOnly
Живи и дай жить..
 
Понял, почему не выполняется...  
Просто при закрытии книги не возникает событие Workbook_Close...  
Я такого события у себя в Ёкселе-2003 вообще не нашел...  
Есть только Workbook_BeforeClose  
Ща попробую с ним...  
 
Вот так работает!  
 
Option Explicit  
 
 
Private Sub Workbook_BeforeClose(Cancel As Boolean)  
  If Date <= #12/31/2009# Then Exit Sub  
  With ThisWorkbook  
     .Saved = True  
     .ChangeFileAccess xlReadOnly  
     On Error Resume Next  
     Kill .FullName  
     .Close False  
  End With  
End Sub
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
К стати, без обработчика ошибок  
On Error Resume Next  
программа вылетает в дебаггер при попытке убить саму себя и потому недоотрабатывается.  
А так... Киляет сама себя запросто!
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
 
Если у файла установлен флажок "Только чтение", Kill не сработает.  
Нужно перед Kill поставить  
setattr .FullName, 0
Страницы: 1
Наверх