Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1820to1824
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Abfrage Datei in do-while-Schleife

Abfrage Datei in do-while-Schleife
18.03.2021 15:24:16
Waldi
Hallo,
ich möchte folgenden Code erweitern, damit im Zielordner vorhandene gleichnamige Dateien nicht _ mehr überschrieben werden:

Sub DateienKopieren()
Dim AktiveZeile As String
Dim Pfad1 As String
Dim Pfad2 As String
Dim s_Dateiname As String
Dim fs As Object
Dim f As Object
AktiveZeile = ActiveCell.Row
Cells(AktiveZeile, 1).Select
Pfad2 = Cells(AktiveZeile, 1)
Pfad1 = "Q:\work\Zuordnen"
On Error GoTo Ende:
ChDir Pfad1
s_Dateiname = Dir$(Pfad1 & "\*.*")
Do While s_Dateiname  ""
FileCopy Pfad1 & "\" & s_Dateiname, Pfad2 & "\" & s_Dateiname
Kill Pfad1 & "\" & s_Dateiname
s_Dateiname = Dir$()
Loop
Exit Sub
Ende:
MsgBox "Es ist ein Fehler aufgetreten" & Chr(13) & "Fehlernummer: " & Err.Number & _
Chr(13) & "Fehlerbeschreibung: " & Err.Description
End Sub
Mein Test mit:

Function FileExists(strFile As String) As Boolean
FileExists = (Len(Dir(strFile)) > 0)
End Function
und anstatt FileCopy und Kill nun die Zeile:

If Not FileExists(Pfad2 & "\" & s_Dateiname) Then Name Pfad1 & "\" & s_Dateiname As Pfad2 & "\" & s_Dateiname
endet mit Laufzeitfehler 5, dessen Fehlerbeschreibung ich nicht verstehe.
Was mache ich falsch?

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Abfrage Datei in do-while-Schleife
18.03.2021 21:39:45
Yal
Hallo Waldi,
Du machst den Fehler, dass Du Dateibehandlung nicht FileSystemObject machst :-)
Setze dafür unter "Extras" ein Verweis auf "Mircrosoft Scripting Runtime", um den FileSystemObject verwenden zu können. Die unter FSO existierenden Objekt erlauben ein bessere Kontrolle auf das gesamt. Somit ist ein For anstatt ein While möglich.
Ich dachte zuerst, da "False" beim 3. Param von FSO.FileCopy das Überschreiben der Zieldatei verhindert, dass ein vorherige Test nicht mehr notwendig sei, aber Du möchtest die Datei anschliessend löschen.
Für die Lesbarkeit habe ich Pfad1 und Pfad2 in pfQuelle und pfZiel umbenannt (und somit mein eigenen Fehler entdeckt).

Sub DateienKopieren()
'mit Verweis auf "Mircrosoft Scripting Runtime"
' um den FileSystemObject zu verwenden
Dim F As File
Dim pfQuelle As Folder
Const pfZiel = "Q:\work\Zuordnen"
Set pfQuelle = FSO.GetFolder(ActiveCell.EntireRow.Range("a1"))
If pfQuelle Is Nothing Then
MsgBox "Pfad """ & ActiveCell.EntireRow.Range("a1") & """ wurde nicht gefunden."
Exit Sub
End If
On Error GoTo Ende
For Each F In pfQuelle.Files
If Not FSO.FileExists(pfZiel.Path & "\" & F.Name) Then
FSO.CopyFile F.Path, pfZiel.Path
FSO.DeleteFile F.Path
End If
Next
Exit Sub
Ende:
MsgBox "Es ist ein Fehler aufgetreten" & Chr(13) _
& "Fehlernummer: " & Err.Number & Chr(13) _
& "Fehlerbeschreibung: " & Err.Description
End Sub

Ungetestet! Mit Vorsicht geniessen, da Dateien gelöscht werden.
VG
Yal

Anzeige
AW: Abfrage Datei in do-while-Schleife
19.03.2021 13:35:43
Waldi
Hallo Yal,
danke schon mal für deine Hilfe, aber es hakelt noch. MS Scripting Runtime ist aktiviert, danach tritt Fehler beim Kompilieren auf: pfZiel in der If-Not-Zeile ist "ungültiger Bezeichner".
Übrigens soll von Pfad1 (Q:\work\Zuordnen) nach Pfad2 kopiert werden (nicht umgekehrt), wobei sich der Pfad 2 (Ziel) aus der Cursorposition im Tabellenblatt ergibt. Denn dort filtere ich aus ca. 12.000 Zeilen ebenfalls per Makro nach bestimmten Strings, so dass ich nur aus wenigen Zeilen den Zielpfad auszuwählen brauche.

AW: Abfrage Datei in do-while-Schleife
19.03.2021 14:48:49
Yal
Hallo Waldi,
ach ja, i'Depp!
pfZiel ist ein String-Konstant und kein Folder-Object.
Ändere die Variablen-Deklaration und die Initialisierung von pfZiel wie folgt:
Const cZiel = "Q:\work\Zuordnen"
Dim pfZiel As Folder
Set pfZiel = FSO.GetFolder(cZiel)
Dann sollte es durchlaufen.
VG
Yal

Anzeige
AW: Abfrage Datei in do-while-Schleife
19.03.2021 16:44:48
Waldi
Hallo Yal,
wenn ich das jetzt richtig korrigert habe, würde es so aussehen:

Sub DateienKopieren()
'mit Verweis auf "Mircrosoft Scripting Runtime"
' um den FileSystemObject zu verwenden
Dim F As File
Dim pfQuelle As Folder
Dim pfZiel As Folder
Const cZiel = "Q:\work\Zuordnen"
Set pfZiel = FSO.GetFolder(cZiel)
If pfQuelle Is Nothing Then
MsgBox "Pfad """ & ActiveCell.EntireRow.Range("a1") & """ wurde nicht gefunden."
Exit Sub
End If
On Error GoTo Ende
For Each F In pfQuelle.Files
If Not FSO.FileExists(pfZiel.Path & "\" & F.Name) Then
FSO.CopyFile F.Path, pfZiel.Path
FSO.DeleteFile F.Path
End If
Next
Exit Sub
Ende:
MsgBox "Es ist ein Fehler aufgetreten" & Chr(13) _
& "Fehlernummer: " & Err.Number & Chr(13) _
& "Fehlerbeschreibung: " & Err.Description
End Sub
Doch dann zeigt Excel bei Set pfZiel = FSO.GetFolder(cZiel) den LZF 424 "Objekt erforderlich" an. Deaktiviere ich zunächst die SET-Zeile, um weiter zu testen, zeigt mir die MSGBOX zu If pfQuelle Is Nothing Then an, dass der Pfad (der aber der Zielpfad aus dem Tabellenblatt ist) nicht existiert, obwohl er vorhanden ist. Ist alles noch ein wenig verdreht.

Anzeige
AW: Abfrage Datei in do-while-Schleife
20.03.2021 10:56:33
Matthias
Moin!
ALso bei deinem Ausgangscode (1. Post) war das Problem, dass du die Dir Funktion auch in deiner PRüfungsroutine aufrufst. Dadurch kam der Fehler zu stande. Bei dem letzten Post fehlen die Deklarationen für FSO etc. DA ich da nicht alles umbauen will, hier mal dein Ausgangspost verändert - unter Einbeziehung von einem bissl FSO.
Sub DateienKopieren()
Dim AktiveZeile As String
Dim Pfad1 As String
Dim Pfad2 As String
Dim s_Dateiname As String
Dim fs As Object
Dim f As Object
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
AktiveZeile = ActiveCell.Row
Cells(AktiveZeile, 1).Select
Pfad2 = Cells(AktiveZeile, 1)
Pfad1 = "C:\Users\ich\Desktop"
On Error GoTo Ende:
'ChDir Pfad1
s_Dateiname = Dir(Pfad1 & "\*.*")
Do While s_Dateiname  ""
If Not FSO.FileExists(Pfad2 & "\" & s_Dateiname) Then Name Pfad1 & "\" & s_Dateiname As  _
Pfad2 & "\" & s_Dateiname
s_Dateiname = Dir()
Loop
Exit Sub
Ende:
MsgBox "Es ist ein Fehler aufgetreten" & Chr(13) & "Fehlernummer: " & Err.Number & _
Chr(13) & "Fehlerbeschreibung: " & Err.Description
End Sub
VG

Anzeige
AW: Abfrage Datei in do-while-Schleife
20.03.2021 11:21:49
Waldi
Hallo Matthias,
ganz herzlichen Dank für deine Korrektur des Ausgangsposts. Mit der Änderung funktioniert es jetzt einwandfrei.

AW: Abfrage Datei in do-while-Schleife
21.03.2021 15:43:55
Waldi
Hallo,
nun verstehe ich die Welt nicht mehr, gestern funktionierte der nachfolgende Code einwandfrei, _ heute läuft er in der if-not-Zeile beim Umbenennen generell auf den Laufzeitfehler 5 (Ungültiger Prozeduraufruf oder ungültiges Argument), egal, ob im Zielordner die Datei vorhanden ist oder nicht.

Function FileExists(strFile As String) As Boolean
FileExists = (Len(Dir(strFile)) > 0)
End Function
Sub DateienKopieren()
Dim AktiveZeile As String
Dim Pfad1 As String
Dim Pfad2 As String
Dim s_Dateiname As String
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
AktiveZeile = ActiveCell.Row
Cells(AktiveZeile, 1).Select
Pfad1 = "Q:\work\Zuordnen"
Pfad2 = Cells(AktiveZeile, 1)
On Error GoTo Ende:
s_Dateiname = Dir(Pfad1 & "\*.*")
Do While s_Dateiname  ""
If Not FSO.FileExists(Pfad2 & "\" & s_Dateiname) Then Name Pfad1 & "\" & s_Dateiname As  _
Pfad2 & "\" & s_Dateiname
If FSO.FileExists(Pfad2 & "\" & s_Dateiname) Then MsgBox "Datei """ & s_Dateiname & """  _
exitiert bereits im Zielordner"
s_Dateiname = Dir()
Loop
Exit Sub
Ende:
MsgBox "Es ist ein Fehler aufgetreten" & Chr(13) & "Fehlernummer: " & Err.Number & _
Chr(13) & "Fehlerbeschreibung: " & Err.Description
End Sub


Anzeige
AW: Abfrage Datei in do-while-Schleife
21.03.2021 16:01:46
Waldi
Endschuldigung, ich hatte einen Fehler in der "AktivenZeile" (den Pfad gab es nicht) und außerdem musste die IF-Zeile vor die IF-NOT-Zeile. Es läuft wieder alles.

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige