https://exceloffthegrid.
com/vba-code-to-copy-move-delete-and-manage-files/
Contents
1.Check if a file exists
2.Rename a file
3.Moving a file
4.Copying a file
5.Delete files
6.Get file attributes
Check if a file exists
If any actions are performed on a file that does not exist, the VBA code will
error. As a result, checking for a file’s existence can be one of the most common
action we perform.
The code below will display True or False in a message box to indicate if the file
exists.
Sub CheckIfFileExists()
'Check if a file exists
MsgBox Dir("C:\Users\marks\Documents\Folder\Text.xlsx") <> ""
End Sub
The code below uses an If statement to carry out different actions depending on if
the file does or does not exist.
Sub PerformActionIfFileExists()
Dim filePath As String
filePath = "C:\Users\marks\Documents\Folder\FileName.xlsx"
If Dir(filePath) <> "" Then
'Insert action for if the file exists
'This example displays a message box
MsgBox filePath & " exists."
Else
'Insert actions if the file does not exist
'This example displays a message box
MsgBox filePath & " does not exist."
End If
End Sub
When regularly checking for the existence of files, it can be easier to have a
reusable function within a Module to be called upon when required.
'Reusable function to check if a file exists
Function DoesFileExist(filePath) As Boolean
DoesFileExist = Dir(filePath) <> ""
End Function
The code below shows how to call the reusable function as part of an If statement.
Sub UseTheFunction()
Dim myFile As String
myFile = "C:\Users\marks\Documents\Folder\FileName.xlsx"
'Call the reusable function to check for file existence
If DoesFileExist(myFile) = True Then
'Insert action for if the file exists
'This example displays a message box
MsgBox "The file exists."
End If
End Sub
Rename a file
The code below renames a file.
Sub RenameAFile()
'Rename a file
Name "C:\Users\marks\Documents\Folder\CurrentFileName.xlsx" _
As "C:\Users\marks\Documents\Folder\NewFileName.xlsx"
End Sub
If the target filename is already an existing file, the code will error.
Therefore, it is good practice to check if the source and target file names are
already in use.
Moving a file
The code to move a file is the same syntax as the code to rename a file.
Sub MoveAFile()
'Move a file
Name "C:\Users\marks\Documents\FileName.xlsx" As _
"C:\Users\marks\Documents\New Folder\FileName.xlsx"
End Sub
Copying a file
Copying a file retains the existing file, but creates a duplicate version of it in
a new location.
Sub CopyAFile()
'Copy a file
FileCopy "C:\Users\marks\Documents\Folder\Original File.xlsx", _
"C:\Users\marks\Documents\New Folder\Copied File.xlsx"
End Sub
If the target filename is already an existing file, the code will error.
Therefore, it is good practice to check if the source and target file names are
already in use.
Delete files
Deleting files removes them completely. Files deleted using VBA are not sent to
the recycle bin, and since there is no undo functionality it can be quite
dangerous. Take extra care to ensure the code does what you expect it to.
The following code deletes a specific file.
Sub DeleteSpecificFile()
'Delete a specific file
Kill "C:\Users\marks\Documents\Folder\DeleteMe.xlsx"
End Sub
The code below deletes files using a wildcard. In this circumstance, it deletes
all files with a .xlsx file extension.
Sub DeleteFilesWithWildcards()
'Delete all .xlsx files using the * wildcard character
Kill "C:\Users\marks\Documents\Folder\*.xlsx"
End Sub
The example below deletes all the files in a folder by using wildcard characters.
Sub DeleteAllFilesInFolder()
'Delete all files from a folder using two * wildcard characters
Kill "C:\Users\marks\Documents\Folder\*.*"
End Sub
Common wildcard characters are:
Character Description
* (asterisk) Any number of characters
? (question mark) Any individual characters
The example below applies the * (asterisk) and ? (question mark) wildcard
characters
'Delete all .xlsx or .xlsm files from a folder, but not .xls files
'as the ? wildcard must be atleast on character in length
Kill "C:\Users\marks\Documents\Folder\*.xls?"
Get file attributes
Each files has specific attributes, for example, they can be read-only, hidden or
system files etc..
The code below checks if a file is read-only.
Sub GetFileAttributes()
Dim myFile As String
myFile = "C:\Users\marks\Documents\Folder\ReadOnlyFile.xlsx"
'If the file is Read-Only, display message box
If (GetAttr(myFile) And vbReadOnly) <> 0 Then
MsgBox "The file is Read only"
End If
End Sub
To check for other attributes, replace vbReadOnly in the code above with the
required settings.
VBA Name of attribute Enumerator Description
vbNormal 0 Files with no attributes (default setting)
vbReadOnly 1 Read-only files
vbHidden 2 Hidden files
vbSystem 4 System files
vbVolume 8 Volume label
vbDirectory 16 Directories