Spakuj plik za pomocą programu VBA

Cze wszystkim.

Stworzyłem program, który od momentu powstania rysunku jest eksportowany w .PDF. Plik DXF . KROK. . Plik DWG

Chciałbym, aby po tym wyeksportowaniu program spakował plik . Plik DXF . KROK. . Plik DWG

Poniżej znajduje się fragment części programu , która tworzy plik ZIP (tylko plik . KROK na chwilę obecną :) 

 – ========================================================================
    ' Pliki ZIP . KROK
    
    Informacje o plikach (ścieżki i nazwy)
    FileAArchiver = DirDest & "\" & sFileRefWE & "-" & IndiceminNew & "-" & IndiceminRevue & ". KROK"
    FileZip = DirDest & "\" & sFileRefWE & "-" & IndiceminNew & "-" & IndiceminRevue & ".ZIP"
    
    Utwórz nowy plik archiwum
    Jeśli Len(Dir(ZipFile)) > 0, Then Kill ZipFile' usuwa archiwum, jeśli już istnieje
    Otwórz FileZip dla danych wyjściowych jako #1
        Drukuj #1, Chr$(80) & Chr$(75) & Chr$(5) & Chr$(6) & String(18, 0)
    Zamknij #1
      
    'Przenosi plik, który ma zostać zarchiwizowany, do archiwum
    Set ApplicationArchiving = CreateObject("Shell.Application")
    ApplicationArchive.Namespace(PlikZip). MoveHere FileAArchiver
    
    "========================================================================

Powstanie .zip miało miejsce, ale potem na linii poniżej blokuje się

  ApplicationArchive.Namespace(PlikZip). MoveHere FileAArchiver

Czy powinienem sprawdzić przypadek w "referencje - EKSPORT"? Jeśli tak, to który?


01.jpg
02.jpg

Witam;

brakuje odwołania "Microsoft Shell Controls And Automation". ?
Ale trudno jest zdiagnozować problem bez deklarowania zmiennych lub bez kodu błędu....


Pozdrowienia.

 

Zrobiłem test, włączając "Microsoft Shell Controls And Automation".

Niestety zawsze jest problem z linią:

ApplicationArchive.Namespace(PlikZip). MoveHere FileAArchiver

 

Deklaracje: 

    Dim ApplicationArchiving as Object (Zwymiaruj aplikacjęArchiwizacja jako obiekt)
    Dim FileAArchiver As String
    Zip jako ciąg

W wierszu ApplicationArchive.Namespace(ZipFile) . MoveHere FileAArchiver

Błąd wykonania "91": 

Zmienna obiektu lub Ze zmienną blokową nie jest zdefiniowana.

Pytam, czy zamówienia. Przestrzeń nazw i . MoveHere są dobrze rozpoznawane przez Solidworks.

 

 

Wypróbowałem ten kod (sprytny Excel), który działa doskonale (w tym z MoveHere zamiast 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

Czy to nie twoja zmienna ZipFile ma nieodpowiedni znak dla ścieżki? Spróbuj na przykład z C:\Temp\Essai.zip.

1 polubienie

Zrobiłem test umieszczając adres bezpośrednio w zmiennej AArchiver  File oraz w ZipFile.

To nie pochodzi stamtąd. Z drugiej strony, czy posiadanie WINRAR na moim komputerze jest problematyczne?

 sbadenis czy mógłbyś zrobić zrzut ekranu swoich referencji - EKSPORT?

kopalnia poniżej

 

 

 


capture.jpg

Właśnie przeprowadziłem test na innym komputerze, który nie ma WINRAR i też nie działa

Program działa dobrze sam w sobie, ale nie jest zawarty w moim

W załączeniu pełny program


data-pack_erp-dlb.swp

Problem bierze się stąd:  M:\Common\PMI\DOC OFFICE\001234-K\\001234-K09-. KROK

Zmienna daje 2 \\ ........................ :/

1 polubienie

To jest to, co pomyślałem, że błąd na ścieżce.

I dla przypomnienia, żaden ref nie zameldował się +

1 polubienie

 

Ostatnie pytanie. :)

Program działa tylko wtedy, gdy rozszerzenia są wyświetlane w Eksploratorze Windows.

Jeśli nie, jak możemyobejść ten problem?

 

Witam

To, czy rozszerzenia są wyświetlane, czy nie, nie powinno mieć wpływu na ścieżkę pliku. Wydaje mi się to dziwne.

Jeśli z jakiegoś niejasnego powodu tak jest naprawdę, musisz sprawdzić, czy możliwe jest przetestowanie stanu wyświetlania rozszerzeń ze skryptu, a jeśli jest ukryte, przełączyć go na  widoczny na czas wykonywania.

 

Znalazłem źródło problemu. VBA jest zbyt szybki w porównaniu do Winzip. Pliki nie mają czasu na dokończenie pakowania, zanim nadejdzie kolejny.

Umieściłem więc okno komunikatu z tak/nie, aby użytkownik podał początek następnego pliku.

Mógłbym również postawić warunek weryfikacji.

W przeciwnym razie rozwiązanie utwórz pojedynczy wiersz poleceń z kilkoma plikami, ale nie wiem, jak to zrobić ( FileAArchiverSTEP = plik . Oczyszczalnia ścieków )

Utworzyłem kolejną zmienną FileAArchiverDWG, FileAArchiverDXF dla każdego pliku i każda linia wysyła ją do ZIP

ApplicationArchive.Namespace(PlikZip). MoveHere PlikAArchiverKROK

ApplicationArchive.Namespace(PlikZip). MoveHere PlikAArchiverDWG

ApplicationArchive.Namespace(PlikZip). MoveHere PlikAArchiverDXF

 

To powinno ci pomóc: https://stackoverflow.com/questions/40987787/vba-copyhere-copy-multiple-files-to-zip-file

Dziękuję za link. W tym przykładzie folder jest spakowany w ZIP. Jezeli zmienie poczatek mojego programu to utworzy folder z DXF, DXG i STEP to moze sie ulec :)

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 polubienia