2013-10-31 89 views
6

我有档案的一个系列:C:/archive1.zip,C:/archive2.zip等如何打开从VBA归档文件而不解压存档

我想只提取一个来自每个档案的文件。 每个归档具有相同的结构和文件可在发现:

C:/archive1.zip/folderlevel1/folderlevel2/folderlevel3/Myfile.csv C:/archive2.zip/folderlevel1/folderlevel2/folderlevel3/Myfile.csv

如何读取vba中的所有文件Myfile.csv?

谢谢!

+3

请参阅示例2:http://www.rondebruin.nl/win/s7/win002.htm –

回答

9

你可以做到这一点,因为这:

' 
' UnZip 1 file from a zip file: 
' 
Function entUnZip1File(ByVal strZipFilename, ByVal strDstDir, _ 
    ByVal strFilename) 
' 
    Const glngcCopyHereDisplayProgressBox = 256 
' 
    Dim intOptions, objShell, objSource, objTarget 
' 
' Create the required Shell objects 
    Set objShell = CreateObject("Shell.Application") 
' 
' Create a reference to the files and folders in the ZIP file 
    Set objSource = _ 
    objShell.NameSpace(strZipFilename).Items.item(CStr(strFilename)) 
' 
' Create a reference to the target folder 
    Set objTarget = objShell.NameSpace(strDstDir) 
' 
    intOptions = glngcCopyHereDisplayProgressBox 
' 
' UnZIP the files 
    objTarget.CopyHere objSource, intOptions 
' 
' Release the objects 
    Set objSource = Nothing 
    Set objTarget = Nothing 
    Set objShell = Nothing 
' 
    entUnZip1File = 1 
' 
End Function 

而在你的宏,调用该函数将文件解压到任何C其中:\ temp目录或任何目标文件夹,而不是C:\ TEMP:

entUnZip1File "C:\archive1.zip", "C:\temp", "folderlevel1/folderlevel2/folderlevel3/Myfile.csv" 
+0

非常感谢Jacouh。它工作得很好。事实上,这比我想象的要容易。我想我没有理解Object.Namespace函数的强大功能! – LouInNY