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

With Application.FileSearch

With Application.FileSearch
19.03.2024 08:34:55
Chr1s44
Hallo zusammen,

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

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: With Application.FileSearch
19.03.2024 08:49:17
Chr1s44
Danke für die Antwort Ralf.

Das ist mir bekannt.
Ich habe leider absolut 0 Ahnung wie was wo :(
Habe mich versucht zu belesen aber wenn man keine ahnung hat bringt mir das nicht viel.

Streng genommen bräuchte ich jemand der mir sagt wo was ich ändern muss.

Viele Grüße
AW: With Application.FileSearch
19.03.2024 10:02:45
RPP63
Du musst nichts ändern, sondern den alten Code entsorgen, weil er nicht mehr lauffähig ist.
Anzeige
AW: With Application.FileSearch
19.03.2024 10:03:00
schauan
Hallöchen,

mal ungetestet - den teil von With ... bis End With kannst Du wohl dadurch ersetzen. Was in Deinem filecheck steckt bzw. ob das passt, schauen wir mal.

Dateiname = Dir(verzeichnis & "*.txt")

Do While Dateiname > ""
i = i + 1
If InStr(1, Dateiname, "_p") = 0 And _
InStr(1, Dateiname, "Proto") = 0 And _
filecheck(verzeichnis & "\" & Dateiname) = "" Then
Sheets(3).Cells(i, 1) = verzeichnis & "\" & Dateiname 'Ablage der Dateinamen im dritten Arbeitsblatt
Else
If filecheck(verzeichnis & "\" & Dateiname) > "" Then sonderzfound = sonderzfound & filecheck(verzeichnis & "\" & Dateiname)
End If
Dateiname = Dir
Loop
Anzeige
AW: With Application.FileSearch
19.03.2024 10:12:04
daniel
Hi
im Prinzip so, ist allerdings ungetestet.

Sub ordnerwahl(ByRef dateiwahl As Variant)


Dim dateipfad As String
Dim Datei As String
Dim Erg As String
Dim FoundFiles



'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

Datei = Dir(verzeichnis & "*.txt")
Do Until Datei = ""
nFiles = nFiles + 1
Erg = Erg & vbLf & verzeichnis & Datei
Datei = Dir
Loop
FoundFiles = Split(Mid(Erg, Len(vbLf) + 1), vbLf)


'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



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

Anzeige
AW: With Application.FileSearch
19.03.2024 11:06:05
Chr1s44
Danke für die Antworten,

@Daniel: ich bekomme die Meldung "Argumenttyp ByRef unverträglich"

Viele Grüße
AW: With Application.FileSearch
19.03.2024 11:21:08
daniel
ich habe keine separate Funktion erstellt, sondern die Suche in das bestehende Makro integriert.
Ist also dein Problem, nicht meins.
und warum gibst du nicht mehr Informationen? Z.B. in welcher Zeile der Fehler auftritt?
Wir haben keine Ahnung von deinem Projekt (es ist jetzt deins!) und könnten den Code so auch nicht laufen lassen.
daher solltest du uns so viele Informationen geben wie möglich.
AW: With Application.FileSearch
19.03.2024 11:39:26
Chr1s44
Hallo,

Sorry das ich mich nicht zu deiner Zufriedenheit ausgedrückt habe.
Ich kann hier gern den ganzen Code des Modules reinschreiben oder dir gern die Datei mal zu kommen lassen.

Viele Grüße
Anzeige
AW: With Application.FileSearch
19.03.2024 11:43:19
daniel
und warum kannst du mir nicht sagen, in welcher Zeile der Fehler auftritt?
Dateien kannst du hier hochladen.
Beachte bitte, dass Foren nicht dazu da sind, unzureichende Prozesse bei Personalwechsel zu kompensieren.
AW: With Application.FileSearch
19.03.2024 11:52:38
Chr1s44
Excel markiert das hier Gelb
"Sub ordnerwahl(ByRef dateiwahl As Variant)"
und das hier ist auch noch markiert
" filecheck(FoundFiles(i)) = "" Then"
Aber nur "FoundFiles"

Deswegen schrieb ich ja
"Streng genommen bräuchte ich jemand der mir sagt wo was ich ändern muss. "
Ab hier hätte man Hilfe verweigern können :)

Hochladen geht nicht da die Datei zu groß ist.

Viele Grüße
Anzeige
AW: With Application.FileSearch
19.03.2024 12:08:16
schauan
Hallöchen,

1)
Dein Sub wird von einem anderen aus gestartet und bekommt dateiwahl als Parameter mit.
2)
schaue mal, welchen Wert i hat und ob das eins mehr ist als UBound(FoundFiles).
3)
siehe mein Code. Hast Du den überhaupt ausprobiert?
AW: With Application.FileSearch
19.03.2024 13:33:22
Chr1s44
Hallo,

Da bekomme ich eine Fehlermeldung mit Sonderzeichen im Namen. Weder im Ordner noch die Datei selbst hat ein Sonderzeichen die aufgelistet sind.
Hier der Fehlerbereich
" .Refresh BackgroundQuery:=False"


Sub import(ByVal Pfad)

'importiert die Daten aus der gewählten Textdatei
'der Pfad wird von der aufrufenden Routine hierher übergeben

pfadbefehl = "TEXT;" & Pfad
With Sheets(2).QueryTables.Add(Connection:=pfadbefehl, _
Destination:=Sheets(2).Cells(1, 1))
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlOverwriteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = xlWindows
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1)
.Refresh BackgroundQuery:=False
End With

'hiernoch die Punkte in Komma verwandeln,
'falls das System auf Deutsch eingestellt ist
decsep = Application.International(xlDecimalSeparator)
If decsep = "," Then
With Sheets(2)
lastrow = .Cells(Rows.Count, 1).End(xlUp).Row
For i = 7 To 20
.Cells(i, 1) = Replace(.Cells(i, 1), ".", ",")
Next i

For i = 23 To lastrow
.Cells(i, 1) = CDbl(Replace(.Cells(i, 1), ".", ","))
.Cells(i, 2) = CDbl(Replace(.Cells(i, 2), ".", ","))
.Cells(i, 3) = CDbl(Replace(.Cells(i, 3), ".", ","))
Next i
End With
End If

End Sub
Anzeige
AW: With Application.FileSearch
19.03.2024 17:14:16
schauan
.ist ja was ganz anderes als vorhin ... dann zeige uns mal Pfad und was steht genau in der Meldung?
AW: With Application.FileSearch
20.03.2024 05:32:28
Chr1s44
Guten Morgen,

was genau meinst du mit "zeig uns mal Pfad"

1. Meldung:
"Folgende Sonderzeichen sind im Dateipfad nicht zulässig!
()"

die 2. Meldung kommt direkt hinterher wenn man OK klickt.
Als Anhang hier.

Userbild
AW: With Application.FileSearch
20.03.2024 09:17:44
schauan
Hallöchen,

in diesem neuen Makro ist nicht ersichtlich, wo und wie Pfad gebildet wird und entsprechend auch nicht, was da drin steht.
In Deinem ersten geposteten Makro steht zwar so eine Meldung, aber da sieht man keinen Zusammenhang zum letzten Makro.

Egal zu welchem Makro könnte man auch die Frage stellen, warum keine () enthalten sein dürfen. Das Filesystem stören die nicht. Einige andere der definierten Sonderzeichen sind ebenfalls zulässig. Du siehst es ja an der zweiten Meldung mit dem Fehler 1004.

Wobei das, falls erforderlich, das Problem nicht löst. Dort stehen andere Ursachen - womit wir wieder bei der Frage sind, was im Pfad steht. Da kommen dann Zusatzfragen wie z.B. ob es die Datei, die da drin steht, auch gibt. Wobei Pfad dann nicht nur der Pfad an sich, sondern auch der Dateiname sein müsste. Da kann man z.B. auch schauen, ob da nicht ein Backslash zwischen Pfad und Dateiname fehlt ....

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.


Eventuell wäre es besser, wenn Du bzw. Dein Chef / die Firma die Anpassung beauftragst. Du merkst es ja am Verlauf dieses Threads ... Da kann man dann auch die Geheimhaltung von Firmendaten absichern und ggf. auch weitere Dateien und Daten senden, z.B. die, auf die da zugegriffen werden soll, ein Abbild der Ordnerstruktur usw.

Ansonsten, wenn Habe mich versucht zu belesen aber wenn man keine ahnung hat bringt mir das nicht viel. und Du das weiterhin selbst lösen willst, dann wäre ggf. erst mal ein VBA-Kurs nicht verkehrt.


Anzeige
AW: With Application.FileSearch
19.03.2024 12:17:49
daniel
naja, warum gibst du solche Informationen nicht gleich mit?
wir sind hier keine Hellseher.

leider fehlt mir jetzt immer noch der Code der Funktion filecheck, die hier aufgerufen wird.
da müsste man zumindest mal sehen, wie die Kopfzeile aussieht und welchen Dateityp diese als Eingabeparameter erwartet.
vermulich musst du du in der Zeile
Function filecheck (name_des_Übergabeparameters) as string
noch ergänzen:
Function fliecheck (byVal name_des_Übergabeparameters) as string

Gruß Daniel

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige