VBA Code to Zip File or Folder
Just like this Unzip vba code, this also uses the Windows default file compressor.
There is only one difference between this code and Unzip.
Yuo just have to swap the parameters & Create a empty Zip file at first.
- Zip file path &
- Folder location.
The first parameters takes the Zip file name to be created. Second parameter is the folder location that has the files to be compressed or a complete file path.
Zip VBA Macro
Use this code to Zip a file or folder. But just modify the input parameters in it, before hitting F5.
Sub ZipVBA() 'Define Variable Data Types 'Early Binding Reference 'Add Tools -> Reference -> "Microsoft Shell Controls & Automation" Dim zipFileName As String Dim unZipFolderName As String Dim objZipItems As FolderItems Dim objZipItem As FolderItem 'Set Zip File Name & Folder path to Unzip zipFileName = "PathToZipFile\FilewithFullPath.zip" unZipFolderName = "Extract\To\Path" 'Create Empty Zip file Open zipFileName For Output As #1 Print #1, Chr$(80) & Chr$(75) & Chr$(5) & Chr$(6) & String(18, 0) Close #1 'Initialize Shell Object & File to be Zipped Dim wShApp As Shell Set wShApp = CreateObject("Shell.Application") Set objZipItems = wShApp.Namespace(unZipFolderName).Items 'Method1: Compress All Files at once wShApp.Namespace(zipFileName).CopyHere objZipItems Do Until wShApp.Namespace(zipFileName).Items.Count = objZipItems.Count DoEvents Debug.Print "Processing " & wShApp.Namespace(zipFileName).Items.Count & " of" & objZipItems.Count Application.Wait DateAdd("s", 1, Now) Loop Debug.Print "Processing " & wShApp.Namespace(zipFileName).Items.Count & " of" & objZipItems.Count 'Method2: ZIP Files One by one For Each objZipItem In objZipItems If objZipItem.Name = "FileName.ext" Then wShApp.Namespace(zipFileName).CopyHere objZipItem End If Next End Sub
In some cases, you might get Object or variable not defined error, if you have not followed the exact order of code or missed any line mentioned above.
Once the code executes successfully, you will get a zip file.
This compressed file can be uncompressed using Windows default app without using third party compressor apps like Winzip or winrar.
This code is very useful when you would like to archive the old log files generated by the vba code. Or when the code is sending email & many files has to be sent as attachment.
Instead of attaching many files, this code can zip all the files and can be attached as one single compressed file.