我有一个 7z .zip 文件,我正在尝试使用 VBA 解压缩。我尝试了多种方法但没有效果。 请参阅下面的 zip 文件类型以确定问题可能出在哪里:
我尝试下面的代码,它运行,下载每个附件,但不解压缩 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
我已经研究了几个小时但没有任何进展。 请帮忙。
谢谢。
引用命令并不难,但也可能很痛苦,因此他的跟随可能会有所帮助,有点像其他语言中的
printf
。
它采用模板字符串并替换值,并用引号替换
"e;
。
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, ""e;", 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(""e;{0}"e; e "e;{1}"e; -o "e;{2}"e; -y", pathTo7Zip, saveFilePath, monthFolder)
End Sub