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