Wenn ich die Shell-Befehlszeile verwenden, Winzip die Variable r und q, die den Pfad und Dateiname zurückgeben erkennt nicht als eine Zeichenfolge bei der Verwendung der Befehlszeile in VBA. Auch welcher Code würde ich brauchen, um irgendwelche Zip-Dateien zu überspringen, die bereits im Verzeichnis sind.Zip-Dateien in Unterordnern mit WinZip
Option Explicit
Public Function ZipAll()
Dim objFSO As New Scripting.FileSystemObject
Dim objFolder As Scripting.Folder
Dim colFiles As Scripting.File
Dim objFile As Object
Dim objStartFolder As String
Dim Subfolder As Scripting.Folder
Set objFSO = CreateObject("Scripting.FileSystemObject")
objStartFolder = "S:\UPSData\EOMOnHand\Abbott\"
Set objFolder = objFSO.GetFolder(objStartFolder)
Set colFiles = objFolder.Files
ShowSubFolders objFSO.GetFolder(objStartFolder)
End Function
Public Function ShowSubFolders(Folder)
Dim objFSO As New Scripting.FileSystemObject
Dim objFolder As Scripting.Folder
Dim colFiles As Scripting.File
Dim objFile As Object
Dim objStartFolder As String
Dim Subfolder As Scripting.Folder
Dim r As String
Dim q As String
Dim NextRow As Long
Set objFSO = CreateObject("Scripting.FileSystemObject")
NextRow = 1
For Each Subfolder In Folder.Subfolders
'MsgBox SubFolder.Path
Set objFolder = objFSO.GetFolder(Subfolder.Path)
Set colFiles = objFolder.Files
For Each objFile In colFiles
r = Subfolder.Path & "\" & objFile.Name & ".zip"
q = Subfolder.Path & "\" & objFile.Name
MsgBox r
MsgBox q
Shell "C:\Program Files\WinZip\WinZip64.exe -min -a " & r & " " & q
NextRow = NextRow + 1
Next
Next
End Function
Als ich q msgbox ich die s zurückgibt: \ upsdata \ eomonhands \ abbott \ abbott.xlsx. Ich verwende theta als den Dateinamen in der Befehlszeile, die winzip aufrufen, aber es nicht als eine Zeichenfolge sehen. Wie gebe ich q als String zurück? Auch was wäre der Code, um weitere Dateien in diesem Ordner herauszufiltern, die bereits Zip-Dateien sind. Ich möchte diese nicht zippen.
Sie erhalten definitiv die Syntax in diesem Befehl falsch - 'C: \ Programme \ WinZip \ WinZip64.exe -min -s: \ UPSData \ EOMOnHand \ Abbott \ xyz \ abc.xlsxs: \ UPSData \ EOMOnHand \ Abbott \ xyz \ * .xlsx' ist nicht gültig, da '-as: \ UPSData \ EOMOnHand \ Abbott \ xyz \ abc.xlsxs: \ UPSData \ EOMOnHand \ Abbott \ xyz \ * .xlsx' kein sinnvoller Parameter ist (aber ich habe WinZip nicht installiert, um zu überprüfen, was die richtige Syntax ist) – YowE3K
@ YowE3K Ok Vergiss den Winzip-Teil. Wenn ich zur objfile.Name komme sagt es Objekt benötigt. Ich habe den Code geschrieben, um den Pfad der Unterordner in Ordnung zu bringen. Der Name wird nicht angezeigt. – Atlas80808
"Es sagt Objekt Require, wenn es die Zeile ojbFile.Name trifft", wirklich? Das 'For Each objFile in colFiles' sollte garantieren, dass es ausgefüllt ist! –