Anzeige
Archiv - Navigation
1540to1544
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

Dateinamen mit beliebiger Zahlenfolge am Ende

Dateinamen mit beliebiger Zahlenfolge am Ende
13.02.2017 10:56:31
Simon
Hallo liebe Leute,
nachdem ich in letzter Zeit viele nette Informationen aus euren Forumsbeiträgen bekommen habe, möchte ich nun auch einmal eure Hilfe in Anspruch nehmen.
Szenario: Ich möchte eine *.csv-Datei einlesen. Meine CSV-Datei hat aufgrund des Exports aus einem anderen System immer einen festen Teil des Dateinamens und danach einen Bindestrich mit einer Zahlenkombination.
Also z.B. Dateiname = "Excelliste" & "-" & "5646468768(beliebig)" & ".csv"
Diese Datei liegt immer im gleichen Ordner und hat immer den gleichen Dateinamen, lediglich die Zahlenkombination am Ende variiert. Über einen Button möchte ich durch einen einfachen klick die *.csv Datei einlesen. Nun stehe ich vor dem Problem, dass ich die Zahlenkombination am Ende in meinem Code nicht beliebig gestalten kann. Ich weiß, dass es bei dem "Like"-Operator den Stern( * ) für ein beliebiges Zeichen im String gibt, allerdings habe ich in diesem Kontext nichts dazu gefunden bzw. habe falsch recherchiert.
Jetzt meine Frage: Wie gestalte ich zum Einlesen das Ende meines Dateinamens ab dem festen Teil als variabel?
Mein Code besteht bis jetzt nur aus dem aufgezeichneten Teil vom Makrorekorder.
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;C:\Daten\Excelliste-20170211121450958.csv" _
, Destination:=Range("$A$1"))
.Name = "Excelliste-20170211121450958"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 65001
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End Sub
Ich hoffe es ist alles verständlich.
Grüße,
Simon

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

Betreff
Datum
Anwender
Anzeige
AW: Dateinamen mit beliebiger Zahlenfolge am Ende
13.02.2017 11:30:42
fcs
Hallo Simon,
wenn immer nur eine Datei mit dem Namensschema in dem Verzeichnis vorhanden ist, dann sollte folgendes funktionieren.
Sub Test()
Dim strDatei As String
Dim strPfad As String
strPfad = "C:\Daten\"
'    strDatei = Dir(strPfad & "Excelliste-?.csv") 'immer gleiche Anzahl Ziffern  _
(17)
strDatei = Dir(strPfad & "Excelliste-*.csv") 'variable Anzahl Ziffern
If strDatei = "" Then
MsgBox "Keine Datei """ & strPfad & "\Excelliste-*.csv"" gefunden"
Else
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & strPfad & strDatei, Destination:=Range("$A$1"))
.Name = Left(strDatei, Len(strDatei) - 4)
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 65001
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End If
End Sub

Anzeige
AW: Dateinamen mit beliebiger Zahlenfolge am Ende
13.02.2017 12:37:08
Simon
Hallo fcs,
dein Code funktioniert wunderbar, vielen Dank für die schnelle Hilfe. Ich hab das mit dem Stern zwar schon auch ausprobiert, aber ohne Variablen. Entweder hab ich dabei einen Fehler reingebracht oder es geht nur über Variablen, wobei das aber ja eigentlich nichts anders ist. Das sei mal so dahingestellt.
Jetzt habe ich ein paar weiterführende Gedanken:
Ich habe nicht erwähnt, dass ich diese Liste täglich benutze. Dabei wird ja jedes mal eine Dateiverknüpfung zu der *.csv Datei hinterlegt und auch ein Name mit dem Datenbereich definiert. Bekomme ich hier irgendwann Probleme wenn eine bestimmte Anzahl an Namen/Dateiverknüpfungen überschritten/erreicht wird?
Den Name kann ich ja einfach beim Einlesen über Name.Delete entfernen. Bei Dateiverknüpfungen weiß ich allerdings nicht wie das auszusehen hat.
Nach Entwicklerhilfe sieht der Code zum Anzeigen der Verknüpfungen so aus:

aLinks = ActiveWorkbook.LinkSources(xlOLELinks)
If Not IsEmpty(aLinks) Then
For i = 1 To UBound(aLinks)
MsgBox "Link " & i & ":" & Chr(13) & aLinks(i)
Next i
End If
Wie kann ich nun die Links entfernen bzw. ansprechen?
Grüße,
Simon
Anzeige
AW: Dateinamen mit beliebiger Zahlenfolge am Ende
13.02.2017 14:41:04
fcs
Hallo Simon,
die Version ohne Varaiblen müsste etwa wie folgt aussehen.
Allerdings bevorzuge ich die Version mit Variablen, da sie übersichtlicher ist und auch einfach für andere Projekte verwendet werden kann.
Ich habe nicht erwähnt, dass ich diese Liste täglich benutze. Dabei wird ja jedes mal eine Dateiverknüpfung zu der *.csv Datei hinterlegt und auch ein Name mit dem Datenbereich definiert. Bekomme ich hier irgendwann Probleme wenn eine bestimmte Anzahl an Namen/Dateiverknüpfungen überschritten/erreicht wird?

Ich hab keine Ahnung bei welcher Anzahl an Verbindungen Excel streikt.
Den Name kann ich ja einfach beim Einlesen über Name.Delete entfernen.
Bei Dateiverknüpfungen weiß ich allerdings nicht wie das auszusehen hat.
....
Wie kann ich nun die Links entfernen bzw. ansprechen?

Mit den folgenden Anweisungen im Anschluß an den Daten-Import kannst du die Abfrage die erstellte Querytable direkt wieder löschen. Siehe auch unten bei der Variante ohne Variablen.
    'Datenverbindung und QueryTable wieder löschen
With ActiveSheet.QueryTables(1)
.MaintainConnection = False
.WorkbookConnection.Delete
.Delete
End With
Um alle Verbindungen einer Arbeitsmappe zu killen hilft folgendes:
Sub Loeschen_AlleVerbindungen()
Dim objCon As Object
If Msgbox("Alle Verbindugen in Arbeitsmappe löschen?", _
vbOKCancel,"Verbindungen")=vbCancel then Exit Sub
For Each objCon In ActiveWorkbook.Connections
objCon.Delete
Next
End Sub
LG
Franz

Sub Test_ohne_Vars()
If Dir("C:\Daten\Excelliste-*.csv")  "" Then
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & "C:\Daten\" & _
Dir("C:\Daten\Excelliste-*.csv"), _
Destination:=Range("$A$1"))
.Name = "MeinDatenimportxxx"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 65001
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
'Datenverbindung und QueryTable wieder löschen
With ActiveSheet.QueryTables(1)
.MaintainConnection = False
.WorkbookConnection.Delete
.Delete
End With
Else
MsgBox "CSV-Datei nicht gefunden"
End If
End Sub

Anzeige
AW: Dateinamen mit beliebiger Zahlenfolge am Ende
14.02.2017 10:11:36
Simon
Hallo Franz,
vielen Dank für deine Mühen, es funktioniert alles wie es soll. Hab wieder bisschen was gelernt :^).
Mit QueryTables kenn ich mich noch nicht so gut aus, werde wohl etwas Zeit hierfür investieren müssen.
Meine Frage ist hiermit beantwortet.
Grüße,
Simon

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige