Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Vba Excel中提取.rar文件_Vba_Excel_Unrar - Fatal编程技术网

在Vba Excel中提取.rar文件

在Vba Excel中提取.rar文件,vba,excel,unrar,Vba,Excel,Unrar,我在Excel中有一个vba宏,它从sharepoint网站下载一个.rar文件并将其解压缩。下载工作正常,我可以在文件夹中看到下载的文件,但提取文件不起作用。 我将只粘贴提取文件的一部分,因此我的代码如下所示 Sub Extract() Dim RarIt As String Dim Source As String Dim Desti As String Dim WinRarPath As String WinRarPath = "C:\Progr

我在Excel中有一个vba宏,它从sharepoint网站下载一个.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的方法失败”


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

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


试试看:
RarIt=Shell(Chr(34)&WinRarPath&“WinRar.exe”&Chr(34)&e&Chr(34)&Source&Chr(34)&“&Chr(34)&Desti&Chr(34),vbNormalFocus)
非常感谢。它起作用了now@Fadi将您的评论作为答案发布;)JuniorDev:对于第二个解决方案,它不起作用,因为Windows无法以本机方式提取rar。@JuniorDev,欢迎您。
Sub Extract2()

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

     Unzip (strFilePath)

End Sub
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