VBA merkt nicht dass Datei schon vorhanden ist

07/11/2013 - 22:06 von Hans Alborg | Report spam
Hallo allerseits,

[Excel 2007]

Diesen gàngigen Code wollte ich nutzen:

For Each objFile In fdateien
If InStr(objFile, "") > 0 Then
If C_Bx5 = 1 And Right(objFile.Name, 4) = ".TXT" Or _
Right(objFile.Name, 4) = ".txt" Then
If Dir(fVerz & "\" & objFile.Name) = "" Then
Name fVerz & "\" & objFile.Name As fVerz & "\" & _
Left(objFile.Name, Len(objFile.Name) - 4)
Else
Name fVerz & "\" & objFile.Name As fVerz & "\" & _
Left(objFile.Name, Len(objFile.Name) - 4) &
"-2"
End If
End If
End If
Next objFile

Wenn also ein File "Name.txt" erkannt wird soll dem die Endung ".txt"
weggenommen werden.
Da gibt's kein Problem.
Falls aber schon ein File "Name" existiert soll mein "Name.txt" in "Name-2"
umbenannt werden.
Jedoch wird durch
< If Dir(fVerz & "\" & objFile.Name) = "" Then >
die Datei ohne Endung nicht erkannt!

Was kann ich machen?

TIA,
Hans
 

Lesen sie die antworten

#1 Bernhard Sander
08/11/2013 - 11:43 | Warnen spam
Hallo Hans,

For Each objFile In fdateien
If InStr(objFile, "") > 0 Then
If C_Bx5 = 1 And Right(objFile.Name, 4) = ".TXT" Or _
Right(objFile.Name, 4) = ".txt" Then
If Dir(fVerz & "\" & objFile.Name) = "" Then
Name fVerz & "\" & objFile.Name As fVerz & "\" & _
Left(objFile.Name, Len(objFile.Name) - 4)
Else
Name fVerz & "\" & objFile.Name As fVerz & "\" & _
Left(objFile.Name, Len(objFile.Name) - 4) & "-2"
End If
End If
End If
Next objFile

Wenn also ein File "Name.txt" erkannt wird soll dem die Endung ".txt"
weggenommen werden.
Da gibt's kein Problem.
Falls aber schon ein File "Name" existiert soll mein "Name.txt" in "Name-2"
umbenannt werden.

Jedoch wird durch
< If Dir(fVerz & "\" & objFile.Name) = "" Then >
die Datei ohne Endung nicht erkannt!



In dem If davor sicherst Du ab, dass bei dieser Abfrage objFile.Name die Endung
.txt enthàlt. Was sollte also an dieser Stelle das Dir() dazu veranlassen, nach
einer Datei ohne Endung Ausschau zu halten?

Es müsste wohl eher so aussehen:

fVerz = fVerz & "\"
For Each objFile In fdateien
If C_Bx5 = 1 And LCase(Right(objFile.Name, 4) = ".txt" Then
NamePur = Left(objFile.Name, len(objFile.Name) - 4)
If Dir(fVerz & NamePur) = "" Then
' Datei ohne Endung nicht vorhanden
Name fVerz & objFile.Name, fVerz & NamePur
Else
' Datei ohne Endung ist vorhanden
Name fVerz & objFile.Name, fVerz & NamePur & "-2"
End If
End If
Next objFile

NB1: nachdem mehrfach ein "\" an fVerz angehàngt wird, habe ich das vor der
Schleife gleich mal global erledigt.
NB2: mit If ... LCase(...) = ".txt" wird sichergestellt, dass auch andere
Schreibweisen der Endung wie Txt oder TxT korrekt erkannt werden. Ausserdem ist
dieser Ausdruck deutlich übersichtlicher und kürzer.
NB3: ist die Liste der Dateien in fDateien so unsauber, dass diese Prüfung
If InStr(objFile, "") > 0 nötig ist? Was bewirkt die überhaupt?

Gruß
Bernhard Sander

Ähnliche fragen