我有一個存檔文件,其中包含多個子文件夾。獲取錯誤'運行時錯誤-2147024894(80070002)'...當提取壓縮文件
例如:C:\Documents and Settings\Owner\Desktop\Macro\Intermediación Financiera\2013\12\BCO_Ind.zip
在BCO_Ind.zip包含此子文件夾scbm\2013\09\fileThatIWant.xls
這些子文件夾是每個存檔文件不同,儘管它具有相同的名稱。 事情是我想要最後一個子文件夾的最後一個文件。
我修改了代碼從http://excelexperts.com/unzip-files-using-vba和www.rondebruin.nl/win/s7/win002.htm
問題是,我得到一個錯誤是: run-time error -2147024894(80070002)': Method 'Namespace' of Object 'IShellDispatch4' failed
。
我嘗試從網站上搜索所有內容,但是我幾乎沒有找到解決方案將近一週。 下面是代碼:
Sub TestRun()
'Change this as per your requirement
Call unzip("C:\Documents and Settings\Owner\Desktop\Macro\Intermediación Financiera\2013\12\", "C:\Documents and Settings\Owner\Desktop\Macro\Intermediación Financiera\2013\12\BCO_Ind.zip")
End Sub
Public Function unzip(targetpath As String, filename As Variant, Optional SCinZip As String, _
Optional excelfile As String) As String '(targetpath As String, filename As Variant)
Dim strScBOOKzip As String, strScBOOK As String: strScBOOK = targetpath
Dim targetpathzip As String, excelpath As String
Dim bzip As Boolean: bzip = False
Dim oApp As Object
Dim FileNameFolder As Variant
Dim fileNameInZip As Object
Dim objFSO As Scripting.FileSystemObject
Dim filenames As Variant: filenames = filename
If Right(targetpath, 1) <> Application.PathSeparator Then
targetpathzip = targetpath & Application.PathSeparator
Else
targetpathzip = targetpath
End If
FileNameFolder = targetpathzip
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set oApp = CreateObject("Shell.Application")
''-----i get an error in here
For Each fileNameInZip In oApp.Namespace(filenames).Items
If objFSO.FolderExists(FileNameFolder & fileNameInZip) Then
objFSO.DeleteFolder FileNameFolder & fileNameInZip, True: Sleep 1000
End If
''-----i get an error in here too
oApp.Namespace(FileNameFolder).CopyHere oApp.Namespace(filename).Items.item(CStr(fileNameInZip))
bzip = True
Next fileNameInZip
If bzip Then
excelpath = findexactfile(targetpath) ' this will go to the function that find the file from subfolders
Else
excelpath = ""
End If
searchfolder = FileNameFolder & fileNameInZip
finish:
unzip = excelpath
Set objFSO = Nothing
Set oApp = Nothing
End Function
我也勾出一些工具>開發宏引用,但它仍然得到同樣的錯誤。我現在真的很緊張+沮喪。請幫我解決它。另外,是否有一個簡單的代碼作爲我的參考文件在提取文件後從子文件夾中查找文件?我真的很感激,如果有人可以分享代碼。
這可能是更容易的zip文件的所有內容複製到一個臨時文件夾,並使用** ** objFSO方法來複制所需的文件。 「我想要最後一個子文件夾的最後一個文件」是什麼意思?你的意思是你想要文件夾中沒有子文件夾的文件? – PatricK
嗨帕特里克...我的意思是我想要的文件是在檔案的最後一個子文件夾。歸檔文件(BCO_Ind.zip)包含這個子文件夾scbm \ 2013 \ 09 \ ** fileThatIWant.xls **因此,我想要這個文件** fileThatIWant.xls ** – user2851376
所以'fileThatIWant.xls'是唯一的文件歸檔?會不會有其他子文件夾,如'scbm \ 2013 \ 08 \ fileThatIWant.xls'?我能夠調整你的代碼,以在zip文件中顯示文件名。你會用這個打開一次以上的zip文件嗎(主文件夾中的所有zip文件)? – PatricK