Platzhalter für Zahl

In einem Excel.Formular habe ich einen Code für das Auflisten von Dateien:
Sub Fill_Listbox_with_Filenames()
Dim i As Long, totFiles As Long
Dim gefFile As String, dname As String
Dim Suchpfad As String, suchbegriff As String, DateiForm As String
Dim oldStatus As Variant
Suchpfad = ActiveWorkbook.Path
If Suchpfad = „“ Then Exit Sub
DateiForm = „*.xls“
If DateiForm = „“ Then Exit Sub

DateiForm:
Momentan werden alle Excel-Dateien aufgelistet. Es sollen aber nur die Dateien angezeigt werden, die eine oder mehrere Zahlen und evtl. Buchstaben im Dateinamen haben, also z.B. „X9823.xls“ oder „853.xls“, nicht aber „XYZ.xls“ etc.
Oder andere Variante: es sollen alle Dateien angezeigt werden ausser „test.xls“
Kann man so ein Kriterium setzen?

Momentan werden alle Excel-Dateien aufgelistet. Es sollen aber
nur die Dateien angezeigt werden, die eine oder mehrere Zahlen
und evtl. Buchstaben im Dateinamen haben, also z.B.
„X9823.xls“ oder „853.xls“, nicht aber „XYZ.xls“ etc.
Oder andere Variante: es sollen alle Dateien angezeigt werden
ausser „test.xls“
Kann man so ein Kriterium setzen?

Hallo Peter,

soweit mir bekannt nicht beim Einlesen, d.h. Einlesen mußt du alle Dateinamen.
Erst dann kannst du das Eingelesene filtern und z.B. nur die „korrekten“ Dateinamen anzeigen lassen.

Angenommen der eingelesen Dateiname steht in der variablen „Satz“:
Ein Beispiel:

If Ucase(right(Satz,8)) „TEST.XLS“ then msgbox Satz

Das mit Zahlen/Buchstaben filtern geht auch, aber halt aufwendiger.

Gruß
Reinhard

Hallo Reinhard,

Das mit Zahlen/Buchstaben filtern geht auch, aber halt
aufwendiger.

damit hast Du mich an die Beitragsfolge zu Regulären Ausdrücken vor einiger Zeit erinnert. Danke für die Übung, klappt! :smile:

Eventuell kannst du die Funktion ‚Filter‘ ja verwenden.

Gruß Rainer

Private Sub Command1\_Click()
 Dim txt(3) As String, i As Integer, Erg As String
 txt(0) = "ab12cd"
 txt(1) = "abcde"
 txt(2) = "1234"
 txt(3) = "12ab"
 For i = 0 To 3
 Erg = Filter(txt(i))
 If Erg "" Then
 List1.AddItem txt(i)
 End If
 Next
End Sub

Private Function Filter(ByVal txt As String) As String
 Dim myRegExp As RegExp
 Dim myMatches As MatchCollection
 Dim myMatch As Match
 Set myRegExp = New RegExp
 myRegExp.IgnoreCase = True
 myRegExp.Global = True
 myRegExp.Pattern = "[0-9]\*"
 Set myMatches = myRegExp.Execute(txt)
 For Each myMatch In myMatches
 If Trim(myMatch.Value) "" Then
 Filter = Trim(myMatch.Value)
 End If
 Next
End Function

Das mit Zahlen/Buchstaben filtern geht auch, aber halt
aufwendiger.

damit hast Du mich an die Beitragsfolge zu Regulären
Ausdrücken vor einiger Zeit erinnert. Danke für die Übung,
klappt! :smile:

Hallo Rainer,

in der Tat, auch ich erinnerte mich spontan daran.
Dann fiel mir ein daß regexp sich auf einen vorliegend Text beziehen muß, nicht auf ein Laufwerk aus dem Dateinamen ausgelesen werden sollen.

So oder so kam ich darauf, erst mal müssen alle Dateinamen eingelesen werden, in ein Textarray oder in eine Textvariable, getrennt durch vbCrLf o.ä.

Dann wollte ich echt schon schreiben, nach dem Einlesen kannste das filtern durch z.B. regexp erledigen lassen, ich weiß da nix genaues, vielleicht Rainer.
Dann dachte ich mir aber, vielleicht hat Rainer es einschlafen lassen sich mit regexp zu beschäftigen so wie ich.
Also schrieb ich es nicht.

Ich irrte mich wie du zeigst :smile:

Gruß
Reinhard

Hallo reinhard,

Ich irrte mich wie du zeigst :smile:

*gg* nein, ich bin da noch nicht weiter. :smile:
Aber der Code im Archiv hat für diese Anwendung gereicht.

Gruß Rainer