Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Dateiname und Platzhalter

Dateiname und Platzhalter
01.12.2005 15:31:20
Bernd
Hallo,
kann ich an CreateObject("Scripting.FileSystemObject")
einen Dateinamen mit Platzhalter übergeben ?
Falls negativ - irgendwo in den Weiten des Netzes habe
ich 'mal ein Beispiel gesehen, mit >Dir nach Fragmenten des Dateinamens zu suchen.
Brauchte ich damals nicht und nicht gemerk. Nun brauche ich
so etwas und finde es nicht wieder.
Evtl. hat jemand etwas passendes in seiner Makrosammlung.
Wäre eine große Hilfe für mich.
Danke sehr und Gruß
Bernd
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Dateiname und Platzhalter
01.12.2005 15:45:30
Rolf
Hallo Bernd,
da musst du auf das FileSearch-Objekt ausweichen.
fG
Rolf
AW: Dateiname und Platzhalter
01.12.2005 16:25:18
Bernd
Hallo Rolf,
Dein Hinweis ist natürlich richtig.
Wegen besonderer Umstände leider in diesem Fall nicht anwendbar.
Ich zerbastel mir auch nur ungern meinen bisherigen Code,
muss aber auf die Eingangs erwähnten Alternativen ausweichen.
(Falls es nicht noch andere gibt, die sich mir im Moment
nicht erschliessen)
Anzeige
AW: Dateiname und Platzhalter
01.12.2005 17:31:27
Reinhard
Hi Bernd,
close
open "c:\such.bat" for output as #1
print #1, "dir c:\Dateien\*.csv /s/b > c:\dateiensuch.txt"
close
shell("c:\such.bat")
open c:\such.bat" for input as #1
while not eof(1)
input #1, PfadDateiname
zei=zei+1
cells(zei,1)=PfadDateiname
wend
/s = mit Unterverzeichnissen
/b = Zusammenfassung ohne Vorspann

Gruß
Reinhard
Anzeige
AW: Dateiname und Platzhalter
01.12.2005 18:02:48
Bernd
Hallo Reinhard,
mein Fehler - ich hätte darauf hinweisen sollen,
dass ich das Problem am Arbeitsplatz habe und leider
nicht alle Möglichkeiten zur Verfügung stehen.
Na ja, das wohl schon - die Ausführung aber durch die
Administration unterbunden wurd.
Ein toller Weg von Dir, leider aber auch nicht umsetzbar.
FileSearch war bis vor kurzem in Gebrauch, aber nach der
Umstellung auf 2003 produziert dieser Aufruf Fehler.
Irgendwo geistert hier auch ein Kollege von mir rum und
versucht die Ursache zu finden.
Mein Part ist es einen Ersatz zu finden ( eben der Versuch
fso oder Dir) um die Anwendung wieder nutzen zu können.
Bislang aber beide mit mäßigem Erfolg ;-)
Aber Danke für die Mühe
Bernd
Anzeige
AW: Dateiname und Platzhalter
01.12.2005 18:23:39
Matthias
Hallo Reinhard,
aber Dir() geht doch:

Sub test()
Dim fn As String
fn = Dir("C:\windows\*.exe")
Do While fn <> ""
Debug.Print fn
fn = Dir()
Loop
End Sub

Gruß Matthias
AW: Dateiname und Platzhalter
01.12.2005 18:45:42
Bernd
Hi Matthias,
wenn ich Dich richtig verstanden habe würde folgendes funktionieren :
Meine Dateien sind alle in der Syntax
BuchstabeBuchstabe123456IrgendeinText.xls
Bekannt ist immer die Ziffernfolge.
Natürlich kann ich aus dem String die Ziffern isolieren.
An das Len-Left-Right Konstrukt habe ich mich bislang nur nicht
'rangemacht weil mir mehrfach gesagt wurde, dass das Ergebnis mit Dir()
nicht zu verwenden sei. Bin ich da etwa einem Irrglauben erlegen ?
Anzeige
AW: Dateiname und Platzhalter
01.12.2005 19:56:36
Matthias
Hallo Bernd,

Sub test()
Const Vezeichnis = "C:\Test"
Dim fn As String
fn = Dir(Verzeichnis & "\?123456*.xls")
Do While fn <> ""
Debug.Print fn
fn = Dir()
Loop
End Sub

Wenn dann noch falsche Dateien dabei sind (weil am Anfang nicht auf Buchstaben geprüft wird, nur auf 2 Zeichen vor der Ziffernfolge), müsstest du die noch anderweitig beseitigen.
Gruß Matthias
Anzeige
AW: Dateiname und Platzhalter
01.12.2005 20:47:25
Bernd
Sauber, das hier
> & "\?123456*.xls") muß ich mir unbedingt klauen ;-))
Ich denke, dass wird ein erfolgreicher Freitag werden.
Vielen Dank für Deine Mühen mit mir.
Bernd
Nachtrag
01.12.2005 18:50:56
Bernd
Damit suchst/findest Du ja alle Dateien (exe in dem Beispiel)
Ich suche aus dem Haufen eine bestimmte und kenne nur einen Teil
des Dateinamens.
Das wird sicher ein kleiner Unterschied sein ?
Anzeige
gelöst
01.12.2005 19:51:26
Bernd
das war offensichtlich die initialzündung ;-)
so in etwa wird es aussehen ( funktioniert schon )
i = 0
Datei = Dir(SERVER & PFAD_ZW_KONTEN_AKTUELL)
Do Until Datei = ""
If Right(Left(Datei, 8), 6) = Right(Environ("USERNAME"), 6) Then
ChDir SERVER & PFAD_ZW_KONTEN_AKTUELL
Workbooks.Open Filename:= _
SERVER & PFAD_ZW_KONTEN_AKTUELL & Datei
Exit Do
End If
i = i + 1
Datei = Dir
Loop
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Dateiname und Platzhalter in Excel nutzen


Schritt-für-Schritt-Anleitung

Um in Excel mit Dateinamen und Platzhaltern zu arbeiten, kannst Du das Dir-Objekt verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne Excel und gehe in den Visual Basic for Applications (VBA)-Editor, indem Du ALT + F11 drückst.

  2. Füge ein neues Modul hinzu, indem Du mit der rechten Maustaste auf "VBAProject" klickst und "Einfügen" > "Modul" auswählst.

  3. Kopiere den folgenden Code in das Modul:

    Sub SucheMitPlatzhalter()
       Dim dateiname As String
       Dim verzeichnis As String
    
       verzeichnis = "C:\DeinVerzeichnis\" ' Ändere den Pfad entsprechend
       dateiname = Dir(verzeichnis & "*.xls") ' Suche nach Excel-Dateien
    
       Do While dateiname <> ""
           Debug.Print dateiname ' Gibt den Dateinamen im Direktfenster aus
           dateiname = Dir() ' Nächster Dateiname
       Loop
    End Sub
  4. Passe den Pfad in der verzeichnis-Variable an.

  5. Führe das Skript aus, um die Dateinamen im angegebenen Verzeichnis aufzulisten.


Häufige Fehler und Lösungen

  • Fehler: "Dateiname nicht gefunden"

    • Lösung: Stelle sicher, dass der Pfad korrekt ist und die Dateien im angegebenen Verzeichnis vorhanden sind.
  • Fehler: "Typenkonflikt"

    • Lösung: Überprüfe, ob die Variablen korrekt deklariert sind und die richtigen Datentypen zugewiesen sind.
  • Problem mit Platzhaltern: Wenn Du Platzhalter wie ? und * nicht wie erwartet verwendest, überprüfe die genaue Syntax.


Alternative Methoden

Falls das Dir-Objekt für Deinen Anwendungsfall nicht ausreicht, kannst Du auch das FileSystemObject verwenden. Hier ist ein Beispiel:

Sub SucheMitFSO()
    Dim fso As Object
    Dim datei As Object
    Dim verzeichnis As String
    Dim ordner As Object
    Dim dateinamen As String

    verzeichnis = "C:\DeinVerzeichnis\"
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ordner = fso.GetFolder(verzeichnis)

    For Each datei In ordner.Files
        If datei.Name Like "*123456*.xls" Then ' Platzhalter verwenden
            Debug.Print datei.Name
        End If
    Next datei
End Sub

Praktische Beispiele

Hier sind einige praktische Beispiele, wie Du den Dir-Befehl und Platzhalter in Excel nutzen kannst:

  1. Suche nach spezifischen Dateien:

    fn = Dir("C:\DeinVerzeichnis\?123456*.xls")
  2. Auflisten aller CSV-Dateien in einem Verzeichnis:

    fn = Dir("C:\DeinVerzeichnis\*.csv")

Diese Beispiele zeigen, wie Du gezielt nach Dateien mit bestimmten Muster suchen kannst, um Deine Daten effizient zu filtern.


Tipps für Profis

  • Verwendung von Like: Nutze den Like-Operator, um komplexere Suchmuster zu definieren. Beispielsweise kannst Du mit Like "*abc*" nach Dateien suchen, die "abc" im Namen enthalten.
  • Optimierung der Suchpfade: Verwende relative Pfade, wenn Du Dein Excel-Dokument auf verschiedenen Rechnern verwenden möchtest.
  • Vermeidung von Fehlern: Implementiere Fehlerbehandlungsmechanismen, um unerwartete Probleme elegant zu lösen.

FAQ: Häufige Fragen

1. Kann ich auch nach anderen Dateiformaten suchen?
Ja, Du kannst das Dateiformat im Dir-Befehl anpassen, z.B. *.txt für Textdateien.

2. Wie kann ich die gefilterten Dateien in einer Liste darstellen?
Du kannst die gefilterten Dateinamen in eine Excel-Tabelle schreiben, indem Du die Cells-Funktion verwendest.

3. Was ist der Unterschied zwischen Dir und FileSystemObject?
Dir ist schneller und einfacher für grundlegende Dateisuchen, während FileSystemObject mehr Funktionalitäten bietet, z.B. das Arbeiten mit Ordnern und Dateien.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige