Excel vba как удалить книгу

Удаление рабочей книги 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” .

VBA Delete Workbook using Kill

Delete Workbook using Kill

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.

VBA Delete Workbook using DeleteFile

Delete Workbook using DeleteFile

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 приведен выше и он должен уже присутствовать в книге либо в модуле книги, либо в стандартном модуле(InsertModule).

Если же необходимо открыть книгу на один раз и сразу после закрытия удалить, то пригодится следующий код:

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
ссылки
статистика

Понравилась статья? Поделить с друзьями:
  • Excel vba как удалить диапазон строк
  • Excel vba как сравнить ячейки
  • Excel vba как сравнить диапазоны
  • Excel vba как создать форму ввода
  • Excel vba как создать новую книгу с именем