Komprimieren einer Datei mit einem VBA-Programm

Hallo ihr alle.

Ich habe ein Programm erstellt , das seit einer Zeichnung in .PDF exportiert wird. DXF . SCHRITT. . DWG-Datei

Ich möchte, dass nach diesem Export das Programm zip die . DXF . SCHRITT. . DWG-Datei

Nachfolgend finden Sie einen Auszug aus dem Teil des Programms , der die ZIP-Datei erstellt ( nur die . STEP für den Moment ) 

 "========================================================================
    ' ZIP-Dateien . SCHRITT
    
    Informationen zu den Dateien (Pfade & Namen)
    FileAArchiver = DirDest & "\" & sFileRefWE & "-" & IndiceminNew & "-" & IndiceminRevue & IndiceminRevue & ". SCHRITT"
    FileZip = DirDest & "\" & sFileRefWE & "-" & IndiceminNew & "-" & IndiceminRevue & ".ZIP"
    
    Erstellen einer neuen Archivdatei
    Wenn Len(Dir(ZipFile)) 0 >, löscht Kill ZipFile' das Archiv, wenn es bereits vorhanden ist
    Öffnen Sie FileZip für die Ausgabe als #1
        Drucken #1, Chr$(80) & Chr$(75) & Chr$(5) & Chr$(6) & String(18, 0)
    Schließen #1
      
    'Verschiebt die zu archivierende Datei in das Archiv
    Set ApplicationArchiving = CreateObject("Shell.Application")
    ApplicationArchive.Namespace(ZipFile). MoveHere-DateiAArchiver
    
    "========================================================================

Die Erstellung des .zip hat stattgefunden, aber dann auf der Linie darunter blockiert

  ApplicationArchive.Namespace(ZipFile). MoveHere-DateiAArchiver

Soll ich einen Fall in "Referenz - EXPORT" überprüfen? Wenn ja, welche?


01.jpg
02.jpg

Hallo;

Ihnen fehlt der Verweis "Microsoft Shell Controls And Automation". ?
Aber es ist schwierig, Ihr Problem zu diagnostizieren, ohne Ihre Variablen zu deklarieren oder ohne den Fehlercode....


Herzliche Grüße.

 

Ich habe einen Test durchgeführt, indem ich "Microsoft Shell Controls And Automation" aktiviert habe.

Leider gibt es immer ein Problem mit der Leitung:

ApplicationArchive.Namespace(ZipFile). MoveHere-DateiAArchiver

 

Deklarationen: 

    Dim-AnwendungArchivierung als Objekt
    Dim-DateiAArchiver als Zeichenfolge
    Als Zeichenfolge komprimieren

In der Zeile ApplicationArchive.Namespace(ZipFile) . MoveHere-DateiAArchiver

Laufzeitfehler '91': 

Objektvariable oder Mit Blockvariable nicht definiert.

Ich frage, ob die Befehle. Namespace und . MoveHere sind von Solidworks gut anerkannt.

 

 

Ich habe diesen Code (cleveres Excel) ausprobiert, der perfekt funktioniert (auch mit MoveHere anstelle von CopyHere):

Sub ArchiverUnFichier()
'par Excel-Malin.com ( https://excel-malin.com )
'---------------------------------------------------------
'gestion des erreurs
    On Error GoTo ErreurCompression

'définition des variables
    Dim ApplicationArchivage As Object
    Dim FichierAArchiver, FichierZip
       
'informations sur les fichiers (chemins & noms)
    FichierAArchiver = "C:\Test\MonFichierWord.docx"
    FichierZip = "C:\Test\Archives\MonArchive_1.zip"
     
'créer un nouveau archive
    If Len(Dir(FichierZip)) > 0 Then Kill FichierZip 'supprime l'archive s'il existe déjà
    Open FichierZip For Output As #1
        Print #1, Chr$(80) & Chr$(75) & Chr$(5) & Chr$(6) & String(18, 0)
    Close #1
      
'copier le fichier à archiver dans l'archive
    Set ApplicationArchivage = CreateObject("Shell.Application")
    ApplicationArchivage.Namespace(FichierZip).CopyHere FichierAArchiver

'Message final
    MsgBox "L'archivage a été lancé..."

Exit Sub
ErreurCompression:
    MsgBox "Une erreur s'est produite..."
End Sub

Wäre es nicht Ihre Variable ZipFile, die ein unangemessenes Zeichen für einen Pfad hat? Versuchen Sie es zum Beispiel mit C:\Temp\Essai.zip.

1 „Gefällt mir“

Ich habe einen Test durchgeführt, indem ich die Adresse direkt in die Variable AArchiver  File und in ZipFile eingefügt habe.

Es kommt nicht von dort. Ist es andererseits problematisch, WINRAR auf meinem PC zu haben?

 sbadenis , können Sie einen Screenshot von Ihren Referenzen - EXPORT machen?

Mine unten

 

 

 


capture.jpg

Ich habe gerade einen Test auf einem anderen PC gemacht, der nicht über WINRAR verfügt, und es funktioniert auch nicht

Das Programm funktioniert gut für sich alleine, ist aber nicht in meinem enthalten

Anbei finden Sie das vollständige Programm


daten-pack_erp-dlb.swp

Das Problem kommt von hier:  M:\Common\PMI\DOC OFFICE\001234-K\\001234-K09-. SCHRITT

Die Variable ergibt 2 \\ ........................ :/

1 „Gefällt mir“

Das ist es, was ich dachte: Fehler auf einem Weg.

Und fürs Protokoll, kein Ref eingecheckt +

1 „Gefällt mir“

 

Letzte Frage. :)

Das Programm funktioniert nur, wenn die Erweiterungen im Windows Explorer angezeigt werden.

Wenn nicht, wie können wirdieses Problem umgehen?

 

Hallo

Ob Erweiterungen angezeigt werden oder nicht, sollte keinen Einfluss auf den Pfad einer Datei haben. Das kommt mir seltsam vor.

Wenn dies aus irgendeinem unerfindlichen Grund wirklich der Fall ist, müssen Sie prüfen, ob es möglich ist, den Anzeigezustand der Erweiterungen aus dem Skript zu testen, und wenn er ausgeblendet ist, schalten Sie ihn für die Zeit, in der er ausgeführt wird, auf  sichtbar.

 

Ich habe den Ursprung des Problems gefunden. Das VBA ist im Vergleich zu Winzip zu schnell. Die Dateien haben keine Zeit, fertig gezippt zu werden, bevor eine neue eintrifft.

Also habe ich eine Messagebox mit ja/nein platziert, damit der Benutzer den Start für die nächste Datei angibt.

Ich könnte auch eine Verifizierungsbedingung stellen.

Andernfalls machen Sie eine einzelne Befehlszeile mit mehreren Dateien, aber ich weiß nicht, wie ich es machen soll ( FileAArchiverSTEP = die Datei . Kläranlage )

Ich habe für jede Datei eine weitere Variable FileAArchiverDWG, FileAArchiverDXF erstellt und jede Zeile sendet sie an das ZIP

ApplicationArchive.Namespace(ZipFile). MoveHere-DateiAArchiverSTEP

ApplicationArchive.Namespace(ZipFile). MoveHere-DateiAArchiverDWG

ApplicationArchive.Namespace(ZipFile). MoveHere-DateiAArchiverDXF

 

Das sollte Ihnen helfen: https://stackoverflow.com/questions/40987787/vba-copyhere-copy-multiple-files-to-zip-file

Vielen Dank für Ihren Link. In diesem Beispiel wird der Ordner mit einer ZIP-Datei versehen. Wenn ich den Anfang meines Programms ändere, um einen Ordner mit dem DXF, DXG und STEP zu erstellen , kann es funktionieren:)

Sub testing()
Dim ZipFile As String
Dim FolderToAdd As String
Dim objShell As Object
Dim varZipFile As Variant

ZipFile = "C:\ZipFile_Images\images.zip"
FolderToAdd = "C:\Images"

Set objShell = CreateObject("Shell.Application")
varZipFile = ZipFile

If Right$(FolderToAdd, 1) <> "\" Then
    FolderToAdd = FolderToAdd & "\"
End If

objShell.NameSpace(varZipFile).CopyHere (FolderToAdd)
End Sub
2 „Gefällt mir“