2

我在 Excel 中有一个 vba 宏,它从共享点站点下载一个 .rar 文件并将其解压缩。下载工作正常,我可以在文件夹中看到下载的文件,但提取文件不起作用。我将仅粘贴提取文件的一部分,因此我的代码如下所示

Sub Extract()

    Dim RarIt As String
    Dim Source As String
    Dim Desti As String
    Dim WinRarPath As String

    WinRarPath = "C:\Program Files\WinRar\"
    Source = "C:\Reports\EMEA Load.rar"
    Desti = "C:\Reports\"

    RarIt = Shell(WinRarPath & "WinRar.exe e " & Source & " " & Desti, vbNormalFocus)

End Sub

所以当我运行它时,它会返回一个消息框“找不到档案”,尽管我可以在文件夹中看到 .rar 文件。

我创建了另一个解决方案,一个解压缩文件的函数

Function Unzip(str_FILENAME As String)

    Dim oApp As Object
    Dim Fname As Variant
    Dim FnameTrunc As Variant
    Dim FnameLength As Long
    Dim FnamePath As Long

    Fname = str_FILENAME
    FnamePath = InStrRev(Fname, "\")
    FnameTrunc = Left(Fname, FnamePath)

    Set oApp = CreateObject("Shell.Application")
    oApp.Namespace(FnameTrunc).CopyHere oApp.Namespace(Fname).Items

End Function

我在我的 Sub 中调用此函数,它适用于 .zip 文件但对于 .rar 文件它返回此错误

“命名空间对象 ishelldispatch6 的方法失败”

Sub Extract2()

    Dim strFilePath As String
    strFilePath = "C:\Reports\EMEA Load.rar"

     Unzip (strFilePath)

End Sub

请问有什么建议我需要在我的代码中更改吗?非常感谢。

4

1 回答 1

1

因为我们在文件名中有空格,所以我们需要将其括起来Chr(34)

Sub Extract()

    Dim RarIt As String
    Dim Source As String
    Dim Desti As String
    Dim WinRarPath As String

    WinRarPath = "C:\Program Files\WinRar\"
    Source = "C:\Reports\EMEA Load.rar"
    Desti = "C:\Reports\"

    RarIt = Shell(Chr(34) & WinRarPath & "WinRar.exe" & Chr(34) & " e " & Chr(34) & Source & Chr(34) & " " & Chr(34) & Desti & Chr(34), vbNormalFocus)

End Sub
于 2017-02-09T13:11:29.743 回答