Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
492to496
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
492to496
492to496
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Sorry: in Winzip komprimierte Exel öffnen

Sorry: in Winzip komprimierte Exel öffnen
05.10.2004 10:07:22
norbert
Hallo zusammen,
ich habe durch Eure Hilfe folgende Befehlsschaltflächen hinbekommen:
1. Öffnen andere Arbeitsmappe (mit oder ohne Schreibschutz)
2. Öffnen Anwendung
3. Öffnen bestimmte Internetseite
Ich schaffe es trotz aller Hilfen und Hinweise auf das Archiv immer noch nicht, eine andere Arbeitsmappe, die in Winzip komprimiert wurde über eine Schaltfläche zu öffnen.
Beispiel:
Standort der zu öffnenden Arbeitsmappe \\G:\Neue Arbeitsmappe.zip
Die gezipte Arbeitsmappe soll nur mit Schreibschutz (readonly) geöffnet werden.
Vielleicht bin ich zu dumm zum zum ... ?
Meine Shell-Versuche sind kläglich gescheitert...
Bitte um Hilfe für einen Anfänger.
Vielen Dank,
Gruss Norbert

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Sorry: in Winzip komprimierte Exel öffnen
05.10.2004 17:09:58
Nepumuk
Hallo Norbert,
das geht mit Excel alleine nicht. Die Datei muss vor dem öffnen erst entpackt werden. Dazu benötigst du entweder eine spezielle DLL (unzip32.dll) oder eine EXE (PKZIP.exe). Das wäre für deinen VBA - Level sicher etwas zu anspruchsvoll. Ein Ausschnitt aus einem Demoprogramm in VB das erst mal in VBA umgeschrieben werden müsste:


Option Explicit
Private Declare Function WaitForSingleObject Lib "kernel32" _
        (ByVal hHandle As LongByVal dwMilliseconds As Long) _
        As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal _
        hObject As LongAs Long
   
Private Declare Function OpenProcess Lib "kernel32" (ByVal _
        dwDesiredAccess As LongByVal bInheritHandle As _
        LongByVal dwProcessId As LongAs Long
        
Const INFINITE = -1&
Const SYNCHRONIZE = &H100000
Dim PKZIP25_Path$
Dim Zip_File_Path$
Dim Zip_File_Name$
Private Sub Form_Load()
  PKZIP25_Path = App.Path & "\PKZIP25.EXE"
  Zip_File_Name = "Test.zip"
  Zip_File_Path = App.Path & "\ZipVerzeichnis"
  If Len(Dir(Zip_File_Path, vbDirectory)) = 0 Then
        MkDir Zip_File_Path
  End If
  
  File1.Path = Zip_File_Path
    
  If Dir$(PKZIP25_Path, vbNormal) = "" Then
    Call InitPKZIP25
  End If
    
  If Dir(Zip_File_Path & "\" & Zip_File_Name) <> "" Then
    Command1.Caption = "Dateien Entpacken"
  Else
    Command1.Caption = "Dateien Zippen"
  End If
End Sub
Private Sub Command1_Click()
  MousePointer = vbHourglass
  If Dir(Zip_File_Path & "\" & Zip_File_Name) <> "" Then
    Call UnZipFiles
    Command1.Caption = "Dateien Zippen"
  Else
    Call ZipFiles
    Command1.Caption = "Dateien Entpacken"
  End If
  MousePointer = vbDefault
End Sub
Private Sub ZipFiles()
  Dim OldDir$, hProcess&, Result&, Task&, l&, x&
  
    OldDir = CurDir()
    ChDrive Left$(Zip_File_Path, 2)
    ChDir Zip_File_Path
        
    Task = Shell(PKZIP25_Path & " -add " & _
                 Zip_File_Name & " *.*", vbHide)
    hProcess = OpenProcess(SYNCHRONIZE, False, Task)
    Result = WaitForSingleObject(hProcess, INFINITE)
    Result = CloseHandle(hProcess)
    If File1.ListCount <> 0 Then
      For x = 0 To File1.ListCount - 1
        If LCase(Right$(File1.List(x), 4)) <> ".zip" Then
          l = l + FileLen(File1.Path & "\" & File1.List(x))
          Kill File1.Path & "\" & File1.List(x)
        End If
      Next x
    End If
    
    File1.Refresh
    x = FileLen(Zip_File_Path & "\" & Zip_File_Name)
    Me.Caption = "Vorher: " & Int(l / 1024) & "kB  Nacher: " & _
                 Int(x / 1024) & "kB"
    
    ChDrive Left$(OldDir, 2)
    ChDir OldDir
End Sub
Private Sub UnZipFiles()
  Dim OldDir$, hProcess&, Result&, Task&, l&, x&, y&
  
    OldDir = CurDir()
    ChDrive Left$(Zip_File_Path, 2)
    ChDir Zip_File_Path
    Task = Shell(PKZIP25_Path & " -extract " & Zip_File_Name, _
                 vbHide)
    hProcess = OpenProcess(SYNCHRONIZE, False, Task)
    Result = WaitForSingleObject(hProcess, INFINITE)
    Result = CloseHandle(hProcess)
    If Dir(Zip_File_Path & "\" & Zip_File_Name) <> "" Then
      y = FileLen(Zip_File_Path & "\" & Zip_File_Name)
      Kill Zip_File_Path & "\" & Zip_File_Name
    End If
    File1.Refresh
    If File1.ListCount <> 0 Then
      For x = 0 To File1.ListCount - 1
        If LCase(Right$(File1.List(x), 4)) <> ".zip" Then
          l = l + FileLen(File1.Path & "\" & File1.List(x))
        End If
      Next x
    End If
    
    Me.Caption = "Vorher: " & Int(y / 1024) & "kB  Nacher: " & _
                 Int(l / 1024) & "kB"
    ChDrive Left$(OldDir, 2)
    ChDir OldDir
End Sub
'Die folgende Routine wird nach der ersten Extraktion von
'pk250c32.exe nicht mehr benötigt und kann daher entfernt
'werden
    
Private Sub InitPKZIP25()
  Dim hProcess&, Result&, Task&
       
    If Dir$(App.Path & "\pk250c32.exe", vbNormal) = "" Then
      MsgBox ("Die Datei " & Chr$(34) & "pk250c32.exe" & _
              Chr$(34) & " ist Nicht vorhanden!" & vbCrLf & _
              "Sie ist zwingend notwendig, daher wird der " & _
              "Vorgang abgebrochen!")
      End
    Else
      Task = Shell(App.Path & "\pk250c32.exe", vbHide)
      hProcess = OpenProcess(SYNCHRONIZE, False, Task)
      Result = WaitForSingleObject(hProcess, INFINITE)
      Result = CloseHandle(hProcess)
      Kill App.Path & "\pk250c32.exe"
    End If
End Sub


Gruß
Nepumuk
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige