Методы сжатия Excel VBA с примерами кода

Что касается сжатия файлов Excel с помощью VBA, вы можете использовать несколько методов. Вот несколько примеров:

  1. Метод SaveAs:

    Sub CompressFile_SaveAs()
       Dim fileName As String
       Dim filePath As String
    
       ' Set the file name and path
       fileName = "Compressed_File.xlsx"
       filePath = "C:\Path\To\Your\File\"
    
       ' Save the file with compression
       ThisWorkbook.SaveAs fileName:=filePath & fileName, FileFormat:=xlOpenXMLWorkbook
    End Sub

    Этот метод сохраняет текущую книгу с другим именем и форматом файла, в результате чего получается сжатый файл. Параметр FileFormatуказывает используемый формат файла.

  2. Метод ExportAsFixedFormat:

    Sub CompressFile_ExportAsPDF()
       Dim fileName As String
       Dim filePath As String
    
       ' Set the file name and path
       fileName = "Compressed_File.pdf"
       filePath = "C:\Path\To\Your\File\"
    
       ' Export the file as a PDF with compression
       ThisWorkbook.ExportAsFixedFormat Type:=xlTypePDF, fileName:=filePath & fileName, Quality:=xlQualityStandard
    End Sub

    Этот метод экспортирует книгу в PDF-файл со сжатием. Параметр Qualityопределяет уровень сжатия.

  3. Сжатие ZIP с использованием внешней библиотеки (требуется ссылка на «Среда выполнения сценариев Microsoft»):

    Sub CompressFile_Zip()
       Dim fileName As String
       Dim filePath As String
       Dim zipFileName As String
       Dim zipFilePath As String
       Dim fso As FileSystemObject
       Dim shellApp As Object
       Dim sourceFolder As Object
       Dim zipFile As Object
    
       ' Set the file name and path
       fileName = "File.xlsx"
       filePath = "C:\Path\To\Your\File\"
       zipFileName = "Compressed_File.zip"
       zipFilePath = "C:\Path\To\Save\Zip\File\"
    
       ' Create the necessary objects
       Set fso = New FileSystemObject
       Set shellApp = CreateObject("Shell.Application")
       Set sourceFolder = shellApp.NameSpace(filePath)
    
       ' Create a new zip file
       Set zipFile = fso.CreateTextFile(zipFilePath & zipFileName, True)
       zipFile.Close
    
       ' Copy the file to the zip file
       shellApp.NameSpace(zipFilePath & zipFileName).CopyHere sourceFolder.Items.Item(fileName)
    
       ' Wait until compression is complete
       Do Until shellApp.NameSpace(zipFilePath & zipFileName).Items.Count = 1
           Application.Wait (Now + TimeValue("0:00:01"))
       Loop
    
       ' Clean up
       fso.DeleteFile filePath & fileName
    End Sub

    Этот метод использует библиотеку «Microsoft Scripting Runtime» для создания zip-файла и копирования в него файла Excel. Он эффективно сжимает файл.