如何使用 VBA 解压缩 7z zip 文件

问题描述 投票:0回答:1

我有一个 7z .zip 文件,我正在尝试使用 VBA 解压缩。我尝试了多种方法但没有效果。 请参阅下面的 zip 文件类型以确定问题可能出在哪里: Image of 7z file

我尝试下面的代码,它运行,下载每个附件,但不解压缩 zip 文件。

Dim ValidExtensions As Collection
Set ValidExtensions = New Collection

ValidExtensions.Add "csv"
ValidExtensions.Add "txt"
ValidExtensions.Add "xls"
ValidExtensions.Add "7z"
ValidExtensions.Add "zip"

Debug.Print "Checking attachments"

For Each objAttachment In objItem.Attachments
    Debug.Print "Found attachment: " & objAttachment.fileName

    Dim extension As String
    extension = LCase(Split(objAttachment.fileName, ".")(UBound(Split(objAttachment.fileName, "."))))
    Debug.Print "Extension: " & extension

    Dim isValidExtension As Boolean
    isValidExtension = False

    Dim validExtension As Variant
    For Each validExtension In ValidExtensions
        If extension = validExtension Then
            isValidExtension = True
            Debug.Print "Valid extension found"
            Exit For
        End If
    Next validExtension

    If isValidExtension Then
        Dim savedFilePath As String
        savedFilePath = monthFolder & "\" & objAttachment.fileName
        Debug.Print "Saving file to: " & savedFilePath
        objAttachment.SaveAsFile savedFilePath
        If extension = "7z" Then
            Debug.Print "7z file found, attempting to unzip"
            Dim pathTo7Zip As String
            pathTo7Zip = "C:\Program Files\7-Zip\7zFM.exe
            Dim command As String
            command = """" & pathTo7Zip & """ e """ & savedFilePath & """ -o""" & monthFolder & """ -y"
            Debug.Print "Running command: " & command
     
            Call shell(command)
        End If
    End If
Next objAttachment

在立即窗口中,我得到以下详细信息,

检查附件 找到附件:image001.jpg 扩展名:.jpg 找到附件:mon_PROD.csv 扩展名:csv 找到有效的扩展名 将文件保存到:C:\Users\Desktop\mon_PROD.csv 检查附件 找到附件:ZIP_mon_PROD.zip 扩展名:zip检查附件 找到附件:image001.jpg 扩展名:.jpg 找到附件:mon_PROD.csv 扩展名:csv 找到有效的扩展名 将文件保存到:C:\Users\Desktop\mon_PROD.csv 检查附件 找到附件:mon_PROD.zip 扩展名: zip 找到有效的扩展名 将文件保存到:C:\Users\Desktop\mon_PROD.zip 找到有效的扩展名 将文件保存到:C:\Users\Desktop\mon_PROD.zip

我已经研究了几个小时但没有任何进展。 请帮忙。

谢谢。

vba navbar vba7 vba6
1个回答
0
投票

引用命令并不难,但也可能很痛苦,因此他的跟随可能会有所帮助,有点像其他语言中的

printf

它采用模板字符串并替换值,并用引号替换

&quote;

Function CommandBuild(ParamArray args() As Variant) As String
If IsMissing(args) Then CommandBuild = vbNullString: Exit Function

Dim Result As String
Dim Index As Integer
Dim UB As Integer: UB = UBound(args)
Dim Count As Integer: Count = UB - LBound(args)

Result = args(0)

If Count > 0 Then
    For Index = 1 To UB
        Result = Replace(Result, "{" & (Index - 1) & "}", args(Index))
    Next
End If

CommandBuild = Replace(Result, "&quote;", Chr(34))

End Function

Sub Example()

Dim pathTo7Zip As String: pathTo7Zip = "C:\Program Files\7-Zip\7z.exe"
Dim saveFilePath As String: saveFilePath = "C:\Users\Desktop\Month\file.7z"
Dim monthFolder As String: monthFolder = "C:\Users\Desktop\Month"

Debug.Print CommandBuild("&quote;{0}&quote; e &quote;{1}&quote; -o &quote;{2}&quote; -y", pathTo7Zip, saveFilePath, monthFolder)

End Sub
© www.soinside.com 2019 - 2024. All rights reserved.