Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Platzhalter fuer Dateiname

Platzhalter fuer Dateiname
19.08.2008 16:21:08
Dirk
Hallo an alle Tüftler,
ich recherchierte schon stundenlang im Archiv nach diesem Betreff - wurde aber nicht so recht fündig.
Ich möchte Daten aus einer csv-Datei in eine xl-Mappe importieren - der Haken ist allerdings, daß der Name der csv-Datei ständig wechselt.
Aus der Bezeichnung "Abc_123456789_080801_080817.csv" sind stets nur die Zeichen bis zum 2. Unterstrich konstant u. es ist die einzige csv, die sich im selben Ordner wie die xls befindet...
Notdürftig habe ich mir zunächst mit dem Archiv-Code für die jüngste csv-Datei beholfen u. bis dahin ist alles auch flexibel.
Allerdings stosse ich sehr schnell an meine Grenzen, wenn es darum geht:
-- Auch der 3. Code soll flexibel gestaltet werden.
-- Der 2. Code funzt zwar perfekt - ich habe ihn nur beigefügt, damit ihr seht, wie ich zu dem Dateinamen komme - den ich auch in A1 in der xls eintrage (s. Mitte des 2. Codes).
-- Richtig knifflig wird das Ganze dann im 3. Code.
Eigentlich wollte ich diesen Zellinhalt von A1, dann später auch im 3. Code benutzen u. am Ende auch wieder im 1. Code (nach dem 2. CALL) zum Schliessen der csv...
Ich suche also nach einer Möglichkeit, sich auf diese Zelle A1 zu beziehen (dort steht der volle csv-Name) oder. mittels Platzhaltern ( "Abc_123456789_*.csv") die Makros flexibel zu halten.
(So könnte das 2. Makro evtl. größtenteils überflüssig werden...)
VB-Code:
Private Sub CommandButton1_Click()  'csv-Import
    'Dim DateiName As String
    Dim Auswahl As Range
    Application.ScreenUpdating = False
    Call juengste_Datei          '****hier wird der csv-Dateiname ermittelt
    If [A1] = "" Then Exit Sub
    [a2].Activate
    [a2].PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
    Call format_Tableau     '****auch hier wird der csv-Dateiname benötigt
    '****jetzt soll die csv-Datei geschlossen werden (meine vergebl. Versuche)
    'Set DateiName.Value = [a1]
    'Workbooks("DateiName").Close
    Application.ScreenUpdating = True
    Set Auswahl = Nothing
End Sub
VB-Code:
Sub juengste_Datei()    'steht in einem Modul
    Dim Datei, JuengsteDatei, Pfad As String, _
        DateiDatum As Date, Abfrage
    Pfad = ThisWorkbook.Path & "\"
    Datei = Dir(Pfad & "*.csv", vbNormal)
    Do
        If FileDateTime(Pfad & Datei) > DateiDatum Then
            DateiDatum = FileDateTime(Pfad & Datei)
            JuengsteDatei = Datei
        End If
        Datei = Dir
    Loop Until Datei = ""
    Abfrage = MsgBox("Die jüngste Datei heißt '" & JuengsteDatei & "'" & vbCr & "und ist vom " & _
        DateiDatum & vbCr & vbCr & "Diese Angaben in A1 eintragen u. die CSV öffnen ?", vbOKCancel)
    If Abfrage = vbOK Then [A1].Value = (JuengsteDatei)
    If Abfrage = vbOK Then Workbooks.Open (Pfad & JuengsteDatei)  'öffnet die jüngste csv-Datei
    If Abfrage = vbCancel Then [A1].ClearContents
    If Abfrage = vbCancel Then Exit Sub
    [a2:q50].Select
    Set Auswahl = Selection
    Auswahl.Copy
    '    ActiveWorkbook.Close   'hier darf die csv aber noch nicht geschlossen werden
    Workbooks("Test-3.xls").Activate
    Worksheets("csv-Import").Activate
End Sub
VB-Code:
Sub format_Tableau()    'steht in gleichen Modul
    Range("A2").Select
    '******wie wäre hier die Syntax mit Platzhaltern ?
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;D:\1\1 Baustellen\csv-Import\Abc_123456789_080801_080817.csv", _
        Destination:=Range("A2"))
    .Name = "Abc_123456789_080801_080817"
    .FieldNames = True
    ...
    ...
    End With
    ...
    ...
    Range("A1").Select
End Sub
Ich hoffe, das Problem verständlich geschildert zu haben und ihr könnt mir helfen.
MfG Dirk

AW: Platzhalter fuer Dateiname
Daniel

Hi
so sollte es eigentlich funktionieren, wenn der korrekte Dateiname incl. ".csv" in Zelle A1 steht:

With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;D:\1\1 Baustellen\csv-Import\" & Range("A1").Value, _
Destination:=Range("A2"))


für .Name dann entsprechend:
.Name = Left$(Range("A1").value, Len(Range("A1").Value)-4)
Gruß, Daniel

AW: Platzhalter fuer Dateiname
Rudi

Hallo,
wenn es die einzige .csv im Ordner ist:
strDateiName=Thisworkbook.path &"\" &dir(Thisworkbook.path &"\" &".csv")
Gruß
Rudi

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Platzhalter fuer Dateiname
19.08.2008 16:27:32
Daniel
Hi
so sollte es eigentlich funktionieren, wenn der korrekte Dateiname incl. ".csv" in Zelle A1 steht:

With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;D:\1\1 Baustellen\csv-Import\" & Range("A1").Value, _
Destination:=Range("A2"))


für .Name dann entsprechend:
.Name = Left$(Range("A1").value, Len(Range("A1").Value)-4)
Gruß, Daniel

Anzeige
AW: Platzhalter fuer Dateiname
19.08.2008 16:29:00
Rudi
Hallo,
wenn es die einzige .csv im Ordner ist:
strDateiName=Thisworkbook.path &"\" &dir(Thisworkbook.path &"\" &".csv")
Gruß
Rudi
AW: Platzhalter fuer Dateiname
19.08.2008 18:02:00
Dirk
Hallo Daniel, hallo Rudi,
so schnell, wie ihr das löst kann ich das noch nicht mal einarbeiten - RESPEKT und vielen Dank...
@Daniel
Ich habe deinen Vorschlag 1:1 in den 3. Code übernommen u. es funktioniert perfekt !
@Rudi
Deine Variante ist mit Sicherheit auch total richtig, aber ich bin zu blöd, das umzusetzen:
Im Kopf des 1. Codes ergänzte ich die Deklaration
Dim strDateiname As String
und im unteren Bereich dann
strDateiname = ThisWorkbook.Path & "\" & Dir(ThisWorkbook.Path & "\" & ".csv")
Workbooks(strDateiname).Close
Es erscheint die Fehlermeldung: Laufzeitfehler 9 - Index außerhalb des gültigen Bereichs
u. der Debugger springt auf die letzte Codezeile (mit dem CLOSE).
Gehe ich mit dem Cursor dann "darüber", erscheint in einem kl. Fenster:
strDateiname = D:\1\1 Baustellen\csv-Import\ - aber es fehlt noch der Dateiname der csv...
Was mache ich falsch ? Ich stehe total auf der Leitung... :-(
Gruß Dirk

Anzeige
AW: Platzhalter fuer Dateiname
19.08.2008 18:41:00
Dirk
Hallo nochmal,
ich habe es in Anlehnung an Daniel's Tipp nun so gelöst:
im 1. Code einfach nur:
Workbooks(Range("A1").Value).Close
u. es funzt einwandfrei...
Zwar hatte ich gehofft, den 2. Code wesentlich kürzen zu können - warum Suchen nach der jüngsten csv, wenn es doch nur eine gibt... - aber Hauptsache ist, daß alles erstmal soweit funktioniert.
Also: Ich danke euch beiden u. wünsche noch einen schönen Abend.
MfG Dirk
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Platzhalter für Dateinamen in Excel nutzen


Schritt-für-Schritt-Anleitung

Um einen variablen Dateinamen für deine CSV-Datei in Excel zu verwenden, folge diesen Schritten:

  1. Öffne die Excel-Datei, in der du die CSV importieren möchtest.
  2. Füge in Zelle A1 den Namen deiner CSV-Datei ein. Zum Beispiel: Abc_123456789_080801_080817.csv.
  3. Erstelle ein neues Modul im VBA-Editor (Alt + F11).
  4. Füge den folgenden Code in das Modul ein:
Sub ImportCSV()
    Dim strDateiName As String
    strDateiName = ThisWorkbook.Path & "\" & Range("A1").Value
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;" & strDateiName, _
        Destination:=Range("A2"))
        .Name = Left$(Range("A1").Value, Len(Range("A1").Value) - 4)
        .FieldNames = True
        .Refresh
    End With
End Sub
  1. Führe das Makro aus, um die CSV-Datei zu importieren.

Häufige Fehler und Lösungen

  • Laufzeitfehler 9 - Index außerhalb des gültigen Bereichs: Dieser Fehler tritt auf, wenn der angegebene Dateiname nicht korrekt ist. Stelle sicher, dass der vollständige Name der CSV-Datei in Zelle A1 steht und dass die Datei im angegebenen Verzeichnis vorhanden ist.

  • CSV-Datei wird nicht gefunden: Überprüfe den Pfad der Datei. Wenn es die einzige CSV im Ordner ist, kannst du den Dateinamen auch dynamisch ermitteln:

strDateiName = ThisWorkbook.Path & "\" & Dir(ThisWorkbook.Path & "\" & "*.csv")

Alternative Methoden

Wenn du mehrere CSV-Dateien im gleichen Ordner hast oder nur die neueste Datei importieren möchtest, kannst du den Code anpassen, um die letzte modifizierte Datei zu ermitteln:

Sub Juengste_Datei()
    Dim Datei As String
    Dim JuengsteDatei As String
    Dim DateiDatum As Date

    Datei = Dir(ThisWorkbook.Path & "\*.csv")
    Do While Datei <> ""
        If FileDateTime(ThisWorkbook.Path & "\" & Datei) > DateiDatum Then
            DateiDatum = FileDateTime(ThisWorkbook.Path & "\" & Datei)
            JuengsteDatei = Datei
        End If
        Datei = Dir
    Loop
    Range("A1").Value = JuengsteDatei
End Sub

Praktische Beispiele

Hier sind einige Beispiele, wie du die oben genannten Techniken anwenden kannst:

  • Importiere die neueste CSV-Datei und füge den Namen in Zelle A1 ein, bevor du das ImportCSV-Makro ausführst.

  • Verwende Platzhalter im Dateinamen, um die Flexibilität zu erhöhen. Zum Beispiel: Abc_*.csv kann verwendet werden, um alle CSV-Dateien mit diesem Präfix zu finden.


Tipps für Profis

  • Nutze Fehlerbehandlung in deinem VBA-Code, um die Robustheit der Anwendung zu verbessern. Zum Beispiel:
On Error Resume Next
' Dein Code hier
If Err.Number <> 0 Then
    MsgBox "Ein Fehler ist aufgetreten: " & Err.Description
End If
On Error GoTo 0
  • Dokumentiere deinen Code gründlich, um die Wartbarkeit zu erhöhen. Kommentare helfen, die Funktionalität für andere Entwickler und auch für dich selbst klarer zu machen.

FAQ: Häufige Fragen

1. Kann ich Platzhalter im Dateinamen verwenden?
Ja, du kannst Platzhalter im Dateinamen verwenden, um flexibler mit verschiedenen Dateinamen umzugehen. Stelle sicher, dass der Pfad korrekt ist.

2. Wie schließe ich die CSV-Datei nach dem Import?
Verwende den Code Workbooks(Range("A1").Value).Close nach dem Import, um die CSV-Datei zu schließen.

3. Was mache ich, wenn der Dateiname nicht in A1 steht?
Du kannst den Dateinamen im Code direkt angeben oder eine Eingabeaufforderung hinzufügen, um den Benutzer nach dem Dateinamen zu fragen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige