Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1828to1832
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

zwei Dateiendungen prüfen

zwei Dateiendungen prüfen
29.04.2021 11:22:19
Vanessa
Hallo liebe Excelfreunde,
ich nutze eine Excel-Tool um Daten in eine Datenbank zu schreiben.
Die Datenbank schaut in regelmäßigen Abständen nach, ob eine Datei mit der
Endung sdt existiert. Der Aufbau der Datei ist wie eine csv.
Wenn ich diese Datei über Excel generitere wird die SDT-Datei in einen vorgegebenen Ordner gespeichert.
Sollte der gleiche Dateinam bereits existieren, so wird ein Zähler aktiviert und zum regulären Dateinamen.sdt
noch eine Zahl gesetzt.
Das sieht wie folgt aus und funktioniert Tadellos:
'prüfen, ob vorgegebener Name bereits im Ordner vorhanden
strDateiCheck = Dir(strOrdner & "\" & strDatei & ".sdt", vbNormal)
If strDateiCheck = "" Then
'neuer Dateiname
strDatei = strOrdner & "\" & strDatei & ".sdt"
Else
'alle Datein finden, die mit dem gleichen Namen beginnen
strDateiCheck = Dir(strOrdner & "\" & strDatei & "*.sdt", vbNormal)
Do Until strDateiCheck = ""
'max. Zählnummern vor dem Punkt der Dateinamenserweiterung ermitteln
strDateiCheck = Replace(strDateiCheck, strDatei, "")
If Left(strDateiCheck, 1) = "." Then
varNr = 0
Else
varNr = Val(Left(strDateiCheck, InStr(1, strDateiCheck, ".") - 1))
End If
If varNr > varNrMax Then varNrMax = varNr
strDateiCheck = Dir
Loop
'Zählnummer erhöhen
varNrMax = varNrMax + 1
'neuer Dateiname - Zählnummern mit führender Null
strDatei = strOrdner & "\" & strDatei & Format(varNrMax, "00") & ".sdt"
End If
Jetzt kommt mein Problem!
Nachdem die Datenbank die Datei abgeholt hat wird sie von Dateiname.sdt in Dateiname.importiert geändert.
Demnach muß ich die Prüfung erweitern auf die Endung sdt und importiert.
existiert Dateiname.sdt dann Dateiname&varNrMax.sdt
existiert Dateiname.importiert dann Dateiname&varNrMax.sdt
Könnt ihr mir bitte weiterhelfen?
Danke Vanessa

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: zwei Dateiendungen prüfen
29.04.2021 16:01:38
Dieter
Hallo Vanessa,
ich denke, du könntest das mit dem folgenden Programm machen

Sub Neu()
Dim fso As Object
Dim fol As Object
Dim fil As Object
Dim strDatei As String
Dim strOrdner As String
Dim varNr As Variant
Dim varNrMax As Variant
strOrdner = "C:\Test"
strDatei = "Beispiel"
Set fso = CreateObject("Scripting.FileSystemObject")
Set fol = fso.getfolder(strOrdner)
For Each fil In fol.Files
If fil.Name Like strDatei & "*.sdt" Or _
fil.Name Like strDatei & "*.importiert" Then
strDateiCheck = fil.Name
'max. Zählnummern vor dem Punkt der Dateinamenserweiterung ermitteln
strDateiCheck = Replace(strDateiCheck, strDatei, "")
If Left(strDateiCheck, 1) = "." Then
varNr = 0
Else
varNr = Val(Left(strDateiCheck, InStr(1, strDateiCheck, ".") - 1))
End If
If varNr > varNrMax Then varNrMax = varNr
End If
Next fil
'Zählnummer erhöhen
varNrMax = varNrMax + 1
'neuer Dateiname - Zählnummern mit führender Null
strDatei = strOrdner & "\" & strDatei & Format(varNrMax, "00") & ".sdt"
Set fso = Nothing
MsgBox strDatei
End Sub
Viele Grüße
Dieter
Anzeige
AW: zwei Dateiendungen prüfen
30.04.2021 08:19:07
Vanessa
Hallo Dieter,
besten Dank, dass geht absolut in die richtige Richtung.
Folgendes Problem ist bei mir aufgetreten, allerdings konnte ich es nicht weiter verfolgen,
da jetzt der Code garnicht mehr reagiert. Ich finde keine Lösung.
Wenn ich Dateiname.sdt habe generiert er Dateiname01.sdt wie er auch sollte.
Wenn ich Dateiname.import habe soll er Dateiname01.sdt erzeugt werden
Existiert Dateiname01.import muss auch Dateiname.import existieren und dann wird Dateiname02.sdt erzeugt
es sei denn es existiert dazu noch bereits Dateiname02.sdt dann muß also Dateiname03.sdt generiert werden.
Nach übertragung in die Datenbank würde in diesem Beispiel demnach folgende Dateien existieren wenn eine sdt vorhanden ist:
Dateiname.import
Dateiname01.import
Dateiname02.import
Dateiname03.import
Oh mein Gott, ob das zu verstehen ist?
Liebe Grüße
Vanessa
Anzeige
Timestamp verwenden!
30.04.2021 17:55:17
Yal
Hallo zusammen,
Warum so kompliziert mit einer Nummer, die man prüfen muss?
Ich gehe davon aus, dass nicht 2 Dateien innerhalb einer Sekunde erzeugt werden, daher könnte man den Namen mit einem Timestamp ergänzen und damit eine durchgehende Eindeutigkeit erreichen.

'Mit Einbindung der Library "Microsoft Scripting Runtime"
'In VB-Editor unter Extras, Verweise
Sub Datei_erzeugen()
Dim fso As New FileSystemObject
Dim F As TextStream
Const cOrdner = "C:\Test\"
Const cDatei = "Beispiel"
Set F = fso.CreateTextFile(cOrdner & cDatei & Format(Now, "_YYYYMMDD_hhmmss") & ".sdt")
End Sub
VG
Yal
Anzeige
AW: zwei Dateiendungen prüfen
30.04.2021 18:37:50
Dieter
Hallo Vanessa,
zuerst müssen wir klären, warum der Code nicht funktioniert.
Dazu die Frage: Ist es (a) genau der von mir angegebene Code, der nicht funktioniert oder hast du ihn (b) in einen größeren Rahmen eingebunden und es gibt da ein Problem.
Falls es sich um Fall (a) handelt: Bei welcher Dateisituation funktioniert der Code nicht?
Falls es sich um Fall (b) handelt: Kannst du den kompletten Code posten?
Deine Bemerkung zu den Dateien mit der Endung ".import" verstehe ich so, dass diese Dateien lückenlos bis zur höchsten Nummer vorhanden sein sollen.
Das könnte das Programm natürlich prüfen. Was soll geschehen, wenn die Lückenlosigkeit nicht gegeben ist?
Soll die Lückenlosigkeit auch bei den sdt-Dateien bestehen?
Bei der Bildung des neuen Dateinamens geht das Programm jetzt schon folgendermaßen vor: Das Maximum der Nummern aller *.sdt- und *.import-Dateien wird bestimmt und um eins erhöht.
Viele Grüße
Dieter
Anzeige
AW: zwei Dateiendungen prüfen
03.05.2021 13:08:13
Vanessa
Hallo,
vielen Dank für die Unterstützung, ich nutze jetzt einen
erweiterten Dateinamen mit dem Zeitstempel. Das funktioniert
und ist für meine Variante sehr gut geeignet.
LG
Vanessa
Vielen Dank für die Rückmeldung. oT
03.05.2021 18:32:20
Yal

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige