Удаление рабочей книги Excel из собственного кода VBA. Удаление объекта ThisWorkbook с помощью кода VBA Excel, размещенного в нем же.
Удаление книги из собственного кода
Удаление книги Excel из собственного кода VBA может использоваться для удаления данных, ставших неактуальными при наступлении определенной даты, или же для удаления демо-версий файлов Excel с кодом VBA, предоставляемых для ознакомления заказчикам.
Удаление объекта ThisWorkbook из кода VBA Excel можно организовать с помощью оператора Kill, используя события Workbook_Open(), Workbook_Activate(), Workbook_Deactivate() и другие.
Удаление ThisWorkbook из кода VBA
Пример 1
Удаление книги Excel из собственного кода VBA с помощью оператора Kill при открытии файла с привязкой к определенной дате:
Private Sub Workbook_Open() If Date > DateSerial(2022, 6, 10) Then ‘Отключение оповещений на время выполнения кода Application.DisplayAlerts = False With ThisWorkbook ‘Переводим книгу в режим «Только чтение»* .ChangeFileAccess xlReadOnly ‘Удаляем объект ThisWorkbook по полному имени Kill .FullName ‘Закрываем книгу без сохранения** .Close 0 End With ‘Включение оповещений Application.DisplayAlerts = True End If End Sub |
* Если не перевести книгу в режим «Только чтение», то выполнение оператора Kill приведет к ошибке.
** Если книгу не закрыть, то открытый экземпляр можно будет вручную пересохранить с новым именем.
Пример 2
Удаление объекта ThisWorkbook из кода VBA Excel, размещенного в нем же, с помощью метода DeleteFile объекта FileSystemObject:
Private Sub Workbook_Open() If Date > DateSerial(2022, 6, 10) Then Application.DisplayAlerts = False Dim fso As Object Set fso = CreateObject(«Scripting.FileSystemObject») With ThisWorkbook .ChangeFileAccess xlReadOnly fso.DeleteFile .FullName .Close 0 End With Application.DisplayAlerts = True End If End Sub |
Результат выполнения кода будет таким же, как и при выполнении кода из первого примера.
После выполнения любой из этих процедур по удалению рабочей книги из собственного кода VBA останется открытым только «пустой» экземпляр приложения Excel, если, конечно, не было других открытых книг.
VBA Delete Workbook in a folder in Excel. Delete Workbook in Excel VBA. We can delete Excel Workbook using Kill statement or DeleteFile method of file system object(FSO). Find example macros, screenshots and instructions to use macros for your reference in the following chapter. In the following examples before deleting files, check whether files are exists or not.
Table of Contents:
- Objective
- Syntax to Delete Workbook in Excel VBA
- Using Kill Statement Delete Workbook in Excel VBA
- Using FSO: DeleteFile method to Delete Workbook in Excel VBA
- Instructions to Run VBA Macro Code
- Other Useful Resources
Syntax to Delete Workbook in Excel VBA
Let us see the syntax to Delete Workbook in Excel VBA.
Method 1: Here is the first method to delete a Workbook using Kill statement.
Kill(PathName)
Read more details and examples about Kill statement by clicking on the following link.
VBA Kill Function
Method 2: Here is the second method to delete a Workbook using DeleteFile method of File System Object(FSO).
FSO.DeleteFile WorkbookName
Using Kill Statement Delete Workbook in Excel VBA
Let us see the example macro to delete Excel Workbook using VBA Kill function.
'Delete Workbook in Excel VBA using Kill Statement Sub VBA_Delete_Workbook_Excel_Using_Kill() 'Variable declaration Dim sWorkbook As String sWorkbook = "C:SomeswariVBAF1SampleWorkbook.xls" Application.DisplayAlerts = False 'Delete Workbook Kill sWorkbook Application.DisplayAlerts = True MsgBox "Specified Workbook has deleted successfully.", vbCritical, "VBAF1" End Sub
Note: If specified workbook doesn’t exists, it displays an error message. I.e Run time error – “File not found” .
Using FSO: DeleteFile method to Delete Workbook in Excel VBA
Let us see the example macro to delete Excel Workbook using VBA DeleteFile method of File System Object(FSO). Here first we are checking whether file exists or not before deleting. If file exists, then deletes the specified file. Otherwise it displays message.
'Delete Workbook in Excel VBA using DeleteFile method of FSO Sub VBA_Delete_Workbook_Excel_Using_FSO() 'Variable declaration Dim FSO Dim sWorkbookName As String 'File Name to delete sWorkbookName = "C:SomeswariVBAF1SampleWorkbook.xls" 'Set Object for file system object Set FSO = CreateObject("Scripting.FileSystemObject") 'Before deleting check file exists or not If FSO.FileExists(sWorkbookName) Then 'If file exists, It will delete the file from source location FSO.DeleteFile sWorkbookName, True MsgBox "Workbook has deleted successfully.", vbInformation, "VBAF1" Else 'If file does not exists, It will display following message MsgBox "Specified Workbook was not found", vbInformation, "Not Found!" End If End Sub
Output: You can notice specified Workbook has deleted from the specified folder.
Instructions to Run VBA Macro Code or Procedure:
You can refer the following link for the step by step instructions.
Instructions to run VBA Macro Code
Other Useful Resources:
Click on the following links of the useful resources. These helps to learn and gain more knowledge.
VBA Tutorial VBA Functions List VBA Arrays in Excel Blog
VBA Editor Keyboard Shortcut Keys List VBA Interview Questions & Answers
Home / VBA / VBA Delete Workbook (Excel File)
To delete an Excel file from a folder you can use two different methods. The first method is the “Kill” statement which takes the file path to refer to the file that you wish to delete. The second method is the FileSystemObject object which has a method associated with it to delete a file.
To use these codes, go to the VBE (Code Editor) from the developer tab.
Delete a File using VBA (Kill Function)
Kill function helps you to delete a single file or multiple files, and use wildcard characters to delete more than one file. Below is the one-line code that deletes the file from the folder that I have on the desktop.
Kill "C:UsersDellDesktopSample Datafile-one.xlsx"
This code will show you an error if the workbook that you specified to delete doesn’t exist.
Helpful Links: Run a Macro – Macro Recorder – Visual Basic Editor – Personal Macro Workbook
Delete All the Files from a Folder using VBA
And if you want to delete all the files that you have in a folder, you can use a wildcard character.
Kill "C:UsersDellDesktopSample Data*.xl*"
Delete a File using the FileSystemObject (Object)
The file system object provides you with access to the computer’s file system. You can learn about it from here, but now, let’s write a code to remove a file.
Full Code
Sub vba_delete_file()
Dim FSO
Dim myFile As String
Set FSO = CreateObject("Scripting.FileSystemObject")
myFile = "C:UsersDellDesktopSample Datafile1.xlsx"
FSO.DeleteFile myFile, True
End Sub
Let’s say you need to write a code that can check for a file, (exists or not) and then delete it. Here’s the code that you need.
Sub vba_delete_file()
Dim FSO
Dim myFile As String
Set FSO = CreateObject("Scripting.FileSystemObject")
myFile = "C:UsersDellDesktopSample Datafile1.xlsx"
If FSO.FileExists(myFile) Then
FSO.DeleteFile myFile, True
MsgBox "Deleted"
Else
MsgBox "There's no workbook with this name."
End If
End Sub
More on VBA Workbooks
VBA Save Workbook | VBA Close Workbook | VBA ThisWorkbook | VBA Rename Workbook | VBA Activate Workbook | VBA Combine Workbook | VBA Protect Workbook (Unprotect) | VBA Check IF a Workbook is Open | VBA Open Workbook | VBA Check IF an Excel Workbook Exists in a Folder| VBA Create New Workbook (Excel File)
- VBA Workbook
Sub SaveIn() Dim y$, x$, ActiveFileName$, Surname$, Surname1$, Surname2$, Surname3$, q$, q1$, q2$, q3$, q4$, q5$ ActiveFileName = ActiveWorkbook.Name ActiveWorkbook.Save Columns("B:B").Select Selection.Find(What:="Итого").Activate y = ActiveCell.Offset(2, -1).Value x = ActiveCell.Offset(3, -1).Value Surname = InStr(1, ActiveFileName, " ", vbTextCompare) Surname1 = Left(ActiveFileName, Surname + 1) Surname2 = Mid(ActiveFileName, InStr(Surname + 1, ActiveFileName, " ", vbTextCompare) + 1, 1) Surname3 = Surname1 & "." & Surname2 & "." & "_" & y & "" ChDir "C:Programs FilesSave" & x & "" q = Dir("C:Program FilesSave" & x & "" & Surname3 & ".xls") q1 = Dir("C:Program FilesSave" & x & "" & Surname3 & " (2).xls") q2 = Dir("C:Program FilesSave" & x & "" & Surname3 & " (3).xls") q3 = Dir("C:Program FilesSave" & x & "" & Surname3 & " (4).xls") q4 = Dir("C:Program FilesSave" & x & "" & Surname3 & " (5).xls") q5 = Dir("C:Program FilesSave" & x & "" & Surname3 & " (6).xls") If q5 = Surname3 & " (6).xls" Then ActiveWorkbook.SaveAs Filename:= _ "C:Program FilesSave" & x & "" & Surname3 & " (7).xls", _ FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _ ReadOnlyRecommended:=False, CreateBackup:=False ElseIf q4 = Surname3 & " (5).xls" Then ActiveWorkbook.SaveAs Filename:= _ "C:Program FilesSave" & x & "" & Surname3 & " (6).xls", _ FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _ ReadOnlyRecommended:=False, CreateBackup:=False ElseIf q3 = Surname3 & " (4).xls" Then ActiveWorkbook.SaveAs Filename:= _ "C:Program FilesSave" & x & "" & Surname3 & " (5).xls", _ FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _ ReadOnlyRecommended:=False, CreateBackup:=False ElseIf q2 = Surname3 & " (3).xls" Then ActiveWorkbook.SaveAs Filename:= _ "C:Program FilesSave" & x & "" & Surname3 & " (4).xls", _ FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _ ReadOnlyRecommended:=False, CreateBackup:=False ElseIf q1 = Surname3 & " (2).xls" Then ActiveWorkbook.SaveAs Filename:= _ "C:Program FilesSave" & x & "" & Surname3 & " (3).xls", _ FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _ ReadOnlyRecommended:=False, CreateBackup:=False ElseIf q = Surname3 & ".xls" Then ActiveWorkbook.SaveAs Filename:= _ "C:Program FilesSave" & x & "" & Surname3 & " (2).xls", _ FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _ ReadOnlyRecommended:=False, CreateBackup:=False Else ActiveWorkbook.SaveAs Filename:= _ "C:Program FilesSave" & x & "" & Surname3 & ".xls", _ FileFormat:=xlExcel8, Password:="", WriteResPassword:="", _ ReadOnlyRecommended:=False, CreateBackup:=False End If iFullName$ = ActiveWorkbook.FullName ActiveWorkbook.Saved = True ActiveWorkbook.ChangeFileAccess Mode:=xlReadOnly SetAttr iFullName$, vbNormal: Kill iFullName$ ActiveWorkbook.Close saveChanges:=False End Sub
Хитрости »
7 Январь 2014 14759 просмотров
Как удалить книгу из самой себя
Несмотря на несколько бредовое название статьи, данный вопрос поднимается с завидным постоянством. Кто-то таким образом хочет защитить свое творение от использования после определенной даты; кто-то слишком мнителен; а кто-то хочет знать просто из интереса: вдруг пригодится?
Несмотря на всю абсурдность вопроса многие считают, что это нереально средствами только VBA. Честно скажу — сам когда-то так думал. Однако все гораздо проще, чем можно было предположить.
Итак, если у вас есть код в книге Excel и вы хотите удалить(самоуничтожить) книгу по прошествии определенной даты (в примере ниже это 30.01.2014):
Sub DelThisWorkbook() If Date > #1/30/2014# Then Application.DisplayAlerts = False ThisWorkbook.ChangeFileAccess xlReadOnly Kill ThisWorkbook.FullName Application.DisplayAlerts = True 'ThisWorkbook.Close 0 'если необходимо сразу же закрыть книгу(рекомендуется) End If End Sub
Необходимо будет лишь вызывать данную процедуру в нужный момент. Каждый решит для себя сам когда это сделать. На открытие книги или перед выполнением основного кода.
Обращаю особое внимание на формат даты: #1/30/2014#. Это формат даты в американском стандарте: Месяц/День/Год. Именно в таком порядке и заключенная в решетки. Решетки дают понять Excel, что это будет дата. Указание даты именно в таком виде делает код универсальным для любой локализации ОС и Excel.
Если необходимо проверять дату при открытии книги, то в модуль книги надо будет поместить такой код:
Private Sub Workbook_Open() DelThisWorkbook End Sub
Код процедуры DelThisWorkbook приведен выше и он должен уже присутствовать в книге либо в модуле книги, либо в стандартном модуле(Insert —Module).
Если же необходимо открыть книгу на один раз и сразу после закрытия удалить, то пригодится следующий код:
Private Sub Workbook_BeforeClose(Cancel As Boolean) Me.ChangeFileAccess xlReadOnly Kill Me.FullName End Sub
Код необходимо поместить в модуль книги.
На всякий случай считаю нужным напомнить, что для применения этого подхода макросы должны быть разрешены.
Так же стоит отдельно отметить тот факт, что таким методом книги удаляются в обход корзины. Т.е. восстановить файл без спец.программ уже не получится.
Еще подобный подход можно применять и не для безвозвратного удаления книги, а просто для запрета её редактирования после определенной даты. Для этого в приведенных выше кодах надо просто убрать строку, которая начинается на
Kill
. Эта строка отвечает за удаление файла и она будет лишней. Если изменить первый код, то получится так:
Sub DelThisWorkbook() If Date > #1/30/2014# Then Application.DisplayAlerts = False ThisWorkbook.ChangeFileAccess xlReadOnly Application.DisplayAlerts = True 'ThisWorkbook.Close 0 'если необходимо сразу же закрыть книгу(рекомендуется) End If End Sub
Строка .ChangeFileAccess xlReadOnly изменяет доступ к файлу только для чтения. Это значит, что если в книгу будут внесены хоть какие-то изменения, то её нельзя будет сохранить и перезаписать. Можно будет только сохранить её копию(т.е. Файл(File) —Сохранить как(Save As)).
Подобный подход удобен в случаях, когда необходимо создать файл шаблона, который потом выкладывается в общую папку для заполнения другими людьми. Например, есть шаблона заявки, который лежит в сетевой папке и который может заполнить любой сотрудник для создания различных заявок(на ремонт ПК, установку ПО, чистку кулера, доставку кофе и т.д.). Как только сотрудник заполнит все нужные поля и сохранит заявку — даже если он ошибется и нажмет простое сохранение будет выдано сообщение о необходимости Сохранить как. Т.е. выбора у него не будет. Шаблон таким образом всегда остается незаполненным.
Сделать такой книгу можно и без макросов. Самый универсальный способ — это после окончательного создания файла нажать Сохранить как(Save As) -внизу диалогового окна раскрыть список Сервис(Tools) —Общие параметры(General options). В появившемся окне поставить галочку напротив пункта «Рекомендовать доступ только для чтения(Read-only recommended)«. Там же можно установить пароли:
- Пароль для открытия(Password to open): в этом случае книгу нельзя будет открыть и даже просматривать, без указания пароля
- Пароль для изменения(Password to modify): в этом случае при открытии книги будет запрошен пароль:
Если его ввести — то будет доступна кнопка Ок и книга откроется как обычно, без ограничений. Если не указать пароль — то будет доступна только отмена открытия книги и кнопка Только для чтения — тогда книга будет открыта с доступом только для чтения
Кстати, такую защиту можно установить на любую книгу и кодом. В примере ниже пароль на редактирование устанавливается для активной в момент выполнения кода книги(назначается пароль «1«(без кавычек)):
Sub SetWritePassword() ActiveWorkbook.WritePassword = "1" End Sub
Если нужно установить другой пароль, то в кавычках вместо 1 надо установить нужный пароль и все. При следующем открытии этой книги будет запрошен пароль на редактирование. Если его не указать — книгу можно будет открыть исключительно для чтения.
Так же см.:
Каждому пользователю свой лист/диапазон
Как удалить папку или все файлы из папки через VBA
Как удалить макросы в книге?
Как удалить строки по условию?
Статья помогла? Поделись ссылкой с друзьями!
Видеоуроки
Поиск по меткам
Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика