2013-10-31 11 views
6

Ich habe eine Reihe von Archiven: C: /archive1.zip, C: /archive2.zip usw.Wie man eine Datei aus einem Archiv in vba öffnen, ohne das Archiv zu entpacken

ich nur eine entnehmende Datei von jedem Archiv. Jedes Archiv hat die gleiche Struktur und Datei finden Sie unter:

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

usw.

Wie kann ich die gesamte Datei Myfile.csv in VBA lesen?

Danke!

+3

siehe Beispiel 2 hier: http://www.rondebruin.nl/win/s7/win002.htm –

Antwort

9

Sie können es als dies tun:

' 
' 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 

Und wo jeder in Ihrem Makro, die Funktion aufrufen, die Datei in C zu extrahieren: \ temp-Verzeichnis oder einem Zielordner anstelle von C: \ temp:

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

vielen Dank Jacouh. Es funktioniert wirklich gut. Eigentlich war es einfacher als ich dachte. Ich glaube, ich hatte die Macht der Funktion Object.Namespace nicht verstanden! – LouInNY

Verwandte Themen