bloodyrulz
Goto Top

VBA Excel - kopieren mit Angabe von Dateinamen und kompletten Ordner kopieren

Hallo,

meine Frage wäre folgende.

Ich bekomme per Mail jeweils einen Link zurgesendet.
Dieser Link endet mal bei einem Ordner oder mal mit Dateiname.
D:\test
D:\test\datei1.txt
Wenn ich bei meinem Programm den Link ohne Dateinamen einfüge passiert leider nichts.
Gibt es eine Möglichkeit das es egal ist ob mit oder ohne Dateinamen.
D.h wenn der Link nur einen Ordner enthält, soll er einfach den kompletten Inhalt des Ordners kopieren.
Wenn Link inkl. Dateinamen, soll er nur diese Datei kopieren.

Ziel und Quell Vereichnis ist immer unterschiedlich.

Kann mir jemand sagen wie ich kopiere egal ob mit oder ohne Dateinamen.

Derzeit benutze ich FileCopy welches bei Angabe inkl. Dateinamen einwandfrei funktioniert. Nur ohne Dateiname kopiert er mir leider nicht den kompletten Ordner ins Zielverzeichnis.

Danke

Gruß
Andreas

Content-Key: 299766

Url: https://administrator.de/contentid/299766

Printed on: April 23, 2024 at 06:04 o'clock

Mitglied: 114757
114757 Mar 22, 2016 updated at 12:09:04 (UTC)
Goto Top
Set fso = CreateObject("Scripting.Filesystemobject")  
item = "D:\test"  
If fso.FileExists(item) Then
    fso.CopyFile item, "C:\ziel\"  
Elseif fso.FolderExists(item) then 
    fso.CopyFolder item, "C:\ziel\"  
End If
Gruß jodel32
Member: BloodyRulz
BloodyRulz Mar 22, 2016 at 14:06:56 (UTC)
Goto Top
Hi,
vielen Dank für deine schnelle Hilfe.
Habe versucht es gleich einzuarbeiten.
Leider musste ich es ein bischen abändern.
Genau da liegt jetzt das Problem.
Leider werden die fso Methoden nicht ausgeführt.
Wenn ich die IF auskomentiere, bekomme ich eine Fehlermeldung invalid Path.

Hab ich beim umschreiben irgendetwas falsch gemacht?
die MsgBox "Anfang _KT gibt er nocht richtig aus danach wars das ohne Fehlermeldung. Nix wird kopiert.

Public Sub FileCopy_KT(ByVal sSourceFile As String, _
                        ByVal sDestFile As String)
Dim fso As Object
Set fso = CreateObject("Scripting.Filesystemobject")  
MsgBox "Anfang _KT" & "Source: " & sSourceFile & " - Dest: " & sDestFile  

'If fso.FileExists(sSourceFile) Then  
    MsgBox "FILECOPY" & "Source: " & sSourceFile & " - Dest: " & sDestFile  
    fso.CopyFile sSourceFile, sDestFile
'ElseIf fso.FolderExists(sSourceFile) Then  
    MsgBox "FOLDERCOPY" & "Source: " & sSourceFile & " - Dest: " & sDestFile  
    fso.CopyFolder sSourceFile, sDestFile
'End If  

End Sub


FileCopy_KT Me.tbWRPFile.Value, KonfigOrdnerPfadRBOrdnerStandortKonfig_Template & "\" & DateiNameFC  
Else
MsgBox "WRP-File wurde NICHT kopiert. Es muss die Datei mit angegeben werden. Ganze Ordner werden NICHT kopiert. Programm wird weiter ausgeführt"  
End If
Else
MsgBox "WRP-File wurde NICHT kopiert. Es wurde kein oder falscher Pfad angegeben oder Datei ist nicht vorhanden. Programm wird weiter ausgeführt"  
End If 

Ich hoffe das ist nur irgendwo ein kleiner Fehler und du kannst mir helfen.
Bin am verzweifeln.

Danke
Gruß
Andreas
Mitglied: 114757
114757 Mar 22, 2016 updated at 14:16:11 (UTC)
Goto Top
Die Pfade für die Destination müssen einen abschließenden Backslash aufweisen wenn nur ein Ordner angeben wird!
Kann man auch in der Doku nachlesen wenn man sie denn mal bemühen würde face-confused immer das selbe
https://msdn.microsoft.com/de-de/library/office/gg264819.aspx

Und mein IF-Konstrukt hast du ja komplett auskommentiert ???... Wenn du diese Dinge beachtetste geht das Problemlos!!!
Member: BloodyRulz
BloodyRulz Mar 22, 2016 updated at 14:40:38 (UTC)
Goto Top
jo die IF-Konstrukte habe ich zum testen auskomentiert. Die sind natürlich wieder drin.
Ich habe wirklich schon ganz viel gelesen. Da ich mich erst an ein Forum wende wenn ich mit lesen nicht mehr weiter komme.
Muss auch dazu sagen das mein 2500 zeiliges Programm mein erster Versuch in sachen Programmierung ist. Habe schon sehr viel gelernt.
Aber bei diesem Fehler stoße ich an meine Grenzen.

Wenn ich einen Pfad angebe OHNE Dateinamen kommt ein Laufzeitfehler 79
in dieser Codezeile
    fso.CopyFolder sSourceFile & "*", sDestFile ' Testweise mit *  
    fso.CopyFolder sSourceFile, sDestFile
Wenn ich aber die Variablen Überwache, sind diese i.O. Also die Pfade lassen sich öffnen und sind auch vorhanden.

PS: Du kannst es vielleicht nicht glauben, aber viele Dokumentationen sind für mich nur Bahnhof. Ich lese viele aber jetzt am Anfang meiner Kenntnisse puh sind die meisten noch zu, wie sagt man : "heftig".
Mitglied: 114757
114757 Mar 22, 2016 updated at 14:50:12 (UTC)
Goto Top
Zitat von @BloodyRulz:

Wenn ich einen Pfad angebe OHNE Dateinamen kommt ein Laufzeitfehler 79
in dieser Codezeile
>     fso.CopyFolder sSourceFile & "*", sDestFile ' Testweise mit *  
>     fso.CopyFolder sSourceFile, sDestFile
> 
Dann zeig doch mal was in deinen Variablen genau drin steht, hellsehen kann ich leider noch nicht ...
Und das der Zielpfad einen abschließenden Backslash haben muss hatte ich oben schon erwähnt...
Beispiele
fso.CopyFolder "c:\Pfad", "c:\ziel\"  
Wenn ich aber die Variablen Überwache, sind diese i.O. Also die Pfade lassen sich öffnen und sind auch vorhanden.
Leider kann ich sie nicht sehen face-sad und deine Berechtigungen auch nicht.
Und was und wie du aus den Ordner kopieren willst steht hier auch nirgendwo.

PS: Du kannst es vielleicht nicht glauben, aber viele Dokumentationen sind für mich nur Bahnhof.
Dann solltest du daran erst mal arbeiten, Programmieren ohne zu verstehen wie man Dokus liest, ein NOGO, das ist Handwerkszeug das man aus dem FF beherrschen sollte als Programmierer.
Zumal auf der Seite ja Beispiele drin stehen die einwandfrei funktionieren!
Member: BloodyRulz
BloodyRulz Mar 22, 2016 at 15:13:49 (UTC)
Goto Top
>>     fso.CopyFolder sSourceFile & "*", sDestFile ' Testweise mit *  
>>     fso.CopyFolder sSourceFile, sDestFile
>> 
Dann zeig doch mal was in deinen Variablen genau drin steht, hellsehen kann ich leider noch nicht ...
Und das der Zielpfad einen abschließenden Backslash haben muss hatte ich oben schon erwähnt...
in dem Variablen sind die Pfade welche verwendet werden. In etwa so.
\\net.domain\VPN\Komponenten\S_wru\Rel_20151007_1453\ ' Variable sDestFile  
O:\Konfiguration\Koeln\Standort1\Konfig_Template\" ' Variable sSourceFile & Me.tbWRPFile.Value  
Wenn ich aber die Variablen Überwache, sind diese i.O. Also die Pfade lassen sich öffnen und sind auch vorhanden.
Leider kann ich sie nicht sehen face-sad und deine Berechtigungen auch nicht.
Und was und wie du aus den Ordner kopieren willst steht hier auch nirgendwo.
Ich möchte wie erwähnt eine/mehrere Dateien je nach Link in ein anderen Ordner kopieren.
Der Link wird in meine Userform in die Textbox tbWRPFile kopiert. Nach klicken von "GO" sollen unter anderem Dateien bzw. ganz Ordner kopiert werden. (Je nach dem auf was der Link verweist)
Mitglied: 114757
Solution 114757 Mar 22, 2016 updated at 15:24:25 (UTC)
Goto Top
Da haben wir ja schon den ersten Fehler die Quelle hat einen abschließenden Backslash der kommt da weg das gilt nur für die Destination.

Zweitens die Methode CopyFolder kopiert nur Ordner rekursiv und keine Dateien, d.h. das bei der Angabe in dieser Art
c:\Quelle\*
bei der Source alle Ordner des Ordners Quelle ins Ziel kopiert werden.
Für Dateien benutzt man dagegen CopyFile, bei dem man in der Source mit Wildcards arbeiten kann, man aber dann in der Destination einen Backslash am Ende benutzen muss.

Die Zielordner sollten natürlich schon angelegt worden sein.

Entsprechende Berechtigungen des Users setze ich natürlich auf den Pfaden vorraus!

Was kapierst du daran nicht ????

Mit minimalem ausprobieren hätte man das ebenfalls schon lange gelöst.

Echt schwer mit dir, sorry.
Member: BloodyRulz
BloodyRulz Mar 22, 2016 at 15:48:53 (UTC)
Goto Top
Danke für deine Hilfe.

Ich hab verstanden.