With Application.FileSearch
19.03.2024 08:34:55
Chr1s44
ich weiß dieses Thema wurde hier schon zich mal besprochen.
Leider muss ich nochmal nachfragen ob jemand helfen kann.
Ein Ex-Mitarbeiter hat uns eine File hinterlassen die natürlich jetzt nicht lauffähig ist.
Könnte mir da jemand helfen? Ich habe absolut keine Ahnung davon und würden gern diese File weiter nutzen wollen auf neueren Systemen.
Sub ordnerwahl(ByRef dateiwahl As Variant)
Dim dateipfad As String
'stellt den nächst höheren Ordner als Directory für den Explorer ein
curpath = ActiveWorkbook.Path
For z = Len(curpath) To 1 Step -1
If Mid(curpath, z, 1) = "\" Then Exit For
Next z 'z ist Position des letzten "\"
upperpath = Mid(curpath, 1, z - 1) 'ist der String des nächst höheren Verzeichnisses
drive = Left(upperpath, 3)
ChDrive drive
ChDir upperpath
'öffnet das Explorerfenster lässt eine Dateiauswahl zu
dateiwahl = Application.GetOpenFilename(, , "Spektrum wählen", "auswählen", False)
'wenn der Benutzer nicht abbricht oder das Explorerfenster schließt gehts weiter
If dateiwahl > False Then 'False ist der Rückgabewert wenn der Benutzer "Abbruch" klickt
dateipfad = dateiwahl
'ermittelt den Verzeichnis-String in dem die gewählte Datei liegt
For z = Len(dateipfad) To 1 Step -1
If Mid(dateipfad, z, 1) = "\" Then Exit For
Next z 'z ist Position des letzten "\"
verzeichnis = Mid(dateipfad, 1, z) 'ist der String des Verzeichnisses
'sucht alle Dateien im gewählten Ordner und listet nur diejenigen mit ".txt" am Ende
With Application.FileSearch
.NewSearch
.LookIn = verzeichnis
.Filename = "*.txt"
.SearchSubFolders = False
.Execute
nFiles = .FoundFiles.Count
'es werden nur Dateien übernommen, die NICHT "_p" oder "Proto" im Dateinamen haben
'-> zB "Protokoll.txt" und "_prt.txt" werden nicht übernommen
sonderzfound = ""
For i = 1 To nFiles
'erstmal Dateinamen extrahieren
Pfad = .FoundFiles(i)
For z = Len(Pfad) To 1 Step -1
If Mid(Pfad, z, 1) = "\" Then Exit For
Next z
Dateiname = Right(Pfad, Len(Pfad) - z)
If InStr(1, Dateiname, "_p") = 0 And _
InStr(1, Dateiname, "Proto") = 0 And _
filecheck(.FoundFiles(i)) = "" Then
Sheets(3).Cells(i, 1) = .FoundFiles(i) 'Ablage der Dateinamen im dritten Arbeitsblatt
Else
If filecheck(.FoundFiles(i)) > "" Then sonderzfound = sonderzfound & filecheck(.FoundFiles(i))
End If
Next i
End With
sonderztext = ""
sonderz = """""!§$%&/()=?´°^`²³{[]}~+*#',;>|µ@"
If sonderzfound > "" Then
For i = 1 To Len(sonderz)
If InStr(1, sonderzfound, Mid(sonderz, i, 1)) > 0 Then sonderztext = sonderztext & Mid(sonderz, i, 1)
Next i
output = MsgBox("Folgende Sonderzeichen sind" & Chr(13) & _
"im Dateipfad nicht zulässig!" & Chr(13) & Chr(13) & _
sonderztext, vbOKOnly, "Sonderzeichen")
End If
End If
End Sub