【VBA】Win10の標準機能でフォルダやファイルを圧縮する

データの圧縮について

8月なのに水が冷たい。。。

秋生まれだからなのか、暑いのと寒いのが苦手。どもjimです✋

今回は、以前あった依頼について記事にしてみようと思います。

どんな依頼かってぇーと、

『フォルダやファイルの圧縮(機能の一部に)』

まだこんなことしている企業があったのか。。。

圧縮が必要な仕事の仕方って、どうなんでしょうか?

多分、いけてねぇっす😅

 

簡単な圧縮方法

Win10の標準機能を使って圧縮するっす。

1、同じ名前の古いzipがあれば消す

2、zipフォルダ作成

3、zipフォルダに指定したフォルダやファイルをコピー

4、コピーが終わるまで待機

Option Explicit
Sub zip()
Dim targetName(2) As Variant
    'targetName(0) = "圧縮するフォルダorファイル
    targetName(0) = "C:\○○\△△フォルダ"
    targetName(1) = "C:\○○\△△\××フォルダ"
    targetName(2) = "C:\○○\△△\Book1.xlsx"
    Call MakeZip("C:\○○\テスト(フルパス).zip", targetName)
End Sub
Private Sub MakeZip(ByVal zipName As String, collections As Variant)
Dim FSO As Object
Dim shellApp As Object
Dim zipFolder As Object
Dim dataObject As Variant
Dim i As Long
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set shellApp = CreateObject("Shell.Application")
    If FSO.fileexists(zipName) = True Then
        FSO.deletefile zipName
    End If
    With FSO.createtextfile(zipName, True)
        .write "PK" & Chr(5) & Chr(6) & String(18, 0)
        .Close
    End With
    i = 0
    Set zipFolder = shellApp.Namespace(FSO.getabsolutepathname(zipName))
    For Each dataObject In collections
        If CStr(dataObject) <> "" Then
            dataObject = FSO.getabsolutepathname(dataObject)
            zipFolder.copyhere (dataObject)
            i = i + 1
        End If
    Next
    Do While zipFolder.Items().Count <> i
        DoEvents
    Loop
    Set FSO = Nothing
    Set shellApp = Nothing
End Sub

何かの事故で無限ループに入ったらすんまてん。

圧縮なんて無駄なこと止めさせたい。。。

したら、またね✋