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

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

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

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige