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

Neuste Datei laden

Neuste Datei laden
04.03.2021 16:53:46
Jörn
Hallo,
ich habe mit dem VBA Recorder das Laden und Umwandeln einer CSV aufgenommen. Ich möchte dieses Makro gern so abändern, dass immer die neueste Datei genommen wird.
Es wäre toll, wenn mir jemand helfen könnte.
Gruß Jörn
Sub load()
' load Makro
' Tastenkombination: Strg+v
ActiveWorkbook.Queries.Add Name:="20201018-100547", Formula:= _
"let" & Chr(13) & "" & Chr(10) & "    Quelle = Csv.Document(File.Contents(""G:\20201018- _
100547.csv""),[Delimiter="","", Columns=25, Encoding=65001, QuoteStyle=QuoteStyle.None])," & Chr(13) & "" & Chr(10) & "    #""Höher gestufte Header"" = Table.PromoteHeaders(Quelle, [PromoteAllScalars=true])," & Chr(13) & "" & Chr(10) & "    #""Geänderter Typ"" = Table.TransformColumnTypes(#""Höher gestufte Header"",{{""date"", type text}, {""opponent1"", type tex" & _
"t}, {""opponent2"", type text}, {""videoStart"", type number}, {""comment"", type text} _
, {""uniqueID"", type text}, {""shots__lineCallType"", Int64.Type}, {""shots__id"", Int64.Type}, {""shots__in_out"", Int64.Type}, {""shots__review"", Int64.Type}, {""shots__status"", type text}, {""shots__x"", type number}, {""shots__y"", type number}, {""shots__ballSpeed"", type " & _
"number}, {""shots__impactSpeed"", type number}, {""shots__netHeight"", type number}, {" _
"shots__spin"", type number}, {""shots__playingx"", type number}, {""shots__playingy"", type number}, {""shots__receivingx"", type number}, {""shots__receivingy"", type number}, {""shots__shotType"", type text}, {""shots__timestamp"", type number}, {""shots__playingEmail"", type t" & _
"ext}, {""shots__receivingEmail"", type text}})" & Chr(13) & "" & Chr(10) & "in" & Chr( _
13) & "" & Chr(10) & "    #""Geänderter Typ"""
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=20201018- _
100547;Extended Properties=""""" _
, Destination:=Range("paste!$A$1")).QueryTable
.CommandType = xlCmdSql
.CommandText = Array("SELECT * FROM [20201018-100547]")
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.ListObject.DisplayName = "_20201018_100547"
.Refresh BackgroundQuery:=False
End With
Sheets("Basic Data").Select
Range("B7").Select
End Sub


13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Neuste Datei laden
04.03.2021 18:03:33
Yal
Hallo Jörn,
probiere mal mit Power Query (PQ):
https://www.youtube.com/playlist?list=PLy5TtUB84yrN2VVRzp8Tif8bxQKJD_2bo
Ich weiss nicht, ob für Dich Video 5 oder 7 am relevanteste ist. Nicht falsch ist, alle anzuschauen in der gegebene Reihenfolge. Gut investierte 1 Std.
Es ist ja nichts anderes, was bei deinem Recorder passiert, nur dass ber PQ Du zuerst den Inhalt des Verzeichnis abfragst, dann kannst Du nach Datum sortieren (neueste oben) und dann nur diese eine öffnen. Und das ohne VBA-Code.
VG
Yal

Anzeige
AW: Neuste Datei laden
04.03.2021 19:14:57
Jörn
Hallo Yal,
mit power query hatte ich es schon mit dem Jason file versucht und Stunden investiert, als ich mit Hilfe des Forums eine Lösung gefunden hatte, ist es mir nicht gelungen, diese in mein spreadsheet zu integrieren. Jetzt wandle ich das Jason file erst in ein CSV file um. Hier stimmt dann das Format, nur muss immer das neuste finden.
Gruß
Jörn

AW: Neuste Datei laden
04.03.2021 20:50:42
Yal
Hallo Jörn,
es heisst JSON und steht für Java Script Object Notation. Wir hatten schon die Sache ziemlich weit gebracht. Schade, dass Du nichts damit anfangen könntest. Aber Power Query von 0 auf 100 mit JSON ist nicht unbedingt a piece of cake.
Lasst dich nicht entmutigen. Die grossten Sieg werden nach dem grossten Kämpfe gefeiert.
VG
Yal

Anzeige
AW: Neuste Datei laden
04.03.2021 23:39:11
Tobias
Hallo Jörn,
hiermit ermittelst du die neuste Datei in einem Verzeichnis.

Private Function NeusterDateiname() As String
Dim objFileSystem As Object
Dim objVerzeichnis As Object
Dim objDatei As Object
Dim objDateiNeuste As Object
Dim strDateipfad As String
strDateipfad = "Bitte eingeben"
Set objFileSystem = CreateObject("Scripting.FileSystemObject")
Set objVerzeichnis = objFileSystem.getfolder(strDateipfad)
For Each objDatei In objVerzeichnis.Files
If objDateiNeuste Is Nothing Then
Set objDateiNeuste = objDatei
Else
If FileDateTime(objDatei) > FileDateTime(objDateiNeuste) Then
Set objDateiNeuste = objDatei
End If
End If
Next
NeusterDateiname = objDateiNeuste.Path
Set objFileSystem = Nothing
Set objVerzeichnis = Nothing
Set objDatei = Nothing
Set objDateiNeuste = Nothing
End Function
Jetzt kannst du damit in deiner Sub den Dateinamen dynamisch anpassen:
Quelle = Csv.Document(File.Contents(""//" & NeusterDateiname() & "//"".....

Ohne die // und eventuell musst du da dann nochmal schauen das die " passend sitzen.
Schöne Grüße
Tobias

Anzeige
AW: Neuste Datei laden
05.03.2021 08:45:29
Jörn
Hallo Tobias,
vielen Dank, sieht kompliziert aus. Ich versuche es in mein Sub einzubauen, mal sehen ob es klappt.
Danke.
Gruß
Jörn

AW: Neuste Datei laden
05.03.2021 09:15:12
Jörn
Hallo Tobias,
ich habe versucht, deine Lösung in mein

Sub einzubauen. Aber meine Kenntnisse genügen wohl nicht für die Integration. vielleicht siehst  _
du ja was falsch ist.
Gruß
Jörn

Sub load()
' load Makro
' Tastenkombination: Strg+v
'Private 

Function NeusterDateiname() As String
Dim objFileSystem As Object
Dim objVerzeichnis As Object
Dim objDatei As Object
Dim objDateiNeuste As Object
Dim strDateipfad As String
strDateipfad = "Bitte eingeben"
Set objFileSystem = CreateObject("Scripting.FileSystemObject")
Set objVerzeichnis = objFileSystem.getfolder(strDateipfad)
For Each objDatei In objVerzeichnis.Files
If objDateiNeuste Is Nothing Then
Set objDateiNeuste = objDatei
Else
If FileDateTime(objDatei) > FileDateTime(objDateiNeuste) Then
Set objDateiNeuste = objDatei
End If
End If
Next
NeusterDateiname = objDateiNeuste.Path
Set objFileSystem = Nothing
Set objVerzeichnis = Nothing
Set objDatei = Nothing
Set objDateiNeuste = Nothing
"let" & Chr(13) & "" & Chr(10) & "    Quelle = Csv.Document(File.Contents(""G://"&  _
Neusterdateiname() _
100547.csv""),[Delimiter="","", Columns=25, Encoding=65001, QuoteStyle=QuoteStyle.None])," &  _
Chr(13) & "" & Chr(10) & "    #""Höher gestufte Header"" = Table.PromoteHeaders(Quelle, [PromoteAllScalars=true])," & Chr(13) & "" & Chr(10) & "    #""Geänderter Typ"" = Table.TransformColumnTypes(#""Höher gestufte Header"",{{""date"", type text}, {""opponent1"", type tex" & _
"t}, {""opponent2"", type text}, {""videoStart"", type number}, {""comment"", type text} _
_
, {""uniqueID"", type text}, {""shots__lineCallType"", Int64.Type}, {""shots__id"", Int64.Type}, _
{""shots__in_out"", Int64.Type}, {""shots__review"", Int64.Type}, {""shots__status"", type text}, {""shots__x"", type number}, {""shots__y"", type number}, {""shots__ballSpeed"", type " & _
"number}, {""shots__impactSpeed"", type number}, {""shots__netHeight"", type number}, {" _
_
"shots__spin"", type number}, {""shots__playingx"", type number}, {""shots__playingy"", type  _
number}, {""shots__receivingx"", type number}, {""shots__receivingy"", type number}, {""shots__shotType"", type text}, {""shots__timestamp"", type number}, {""shots__playingEmail"", type t" & _
"ext}, {""shots__receivingEmail"", type text}})" & Chr(13) & "" & Chr(10) & "in" & Chr(  _
_
13) & "" & Chr(10) & "    #""Geänderter Typ"""
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
"OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=20201018- _
100547;Extended Properties=""""" _
, Destination:=Range("paste!$A$1")).QueryTable
.CommandType = xlCmdSql
.CommandText = Array("SELECT * FROM [20201018-100547]")
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.ListObject.DisplayName = "_20201018_100547"
.Refresh BackgroundQuery:=False
End With
Sheets("Basic Data").Select
Range("B7").Select
End Sub


Anzeige
AW: Neuste Datei laden
05.03.2021 12:56:29
Tobias
Hallo Jörn,
eine Funktion ist ein für sich stehender Befehl der dann aus anderen Quellen aufgerufen werden kann.
Folglich muss dein Code entsprechend geändert werden:

sub load()
end sub
private function NeusterDateiname() as String
end function

Dann musst du in der function den strDateipfad entsprechend des Ortes deiner Dateien abändern

strDateipfad = "G:\"

und in deiner Sub dann den Verweis auf die aktuellste Dateiändern
Quelle = Csv.Document(File.Contents(""" & Neusterdateiname() & """),[Delimiter ....
Schöne Grüße
Tobias

Anzeige
AW: Neuste Datei laden
05.03.2021 16:49:35
Jörn
Hallo Tobias,
erstmal vielen Dank, und sorry für meine Unerfahrenheit!
Es sieht jetzt schon besser aus, aber in der Übergang von deinem zu meinem Sub nach =nothing ist noch rot.
Gruß
Jörn
Set objDateiNeuste = Nothing
"let" & Chr(13) & "" & Chr(10) & " Quelle = Csv.Document(File.Contents(""" & Neusterdateiname() & """),
[Delimiter="","", Columns=25, Encoding=65001, QuoteStyle=QuoteStyle.None])," & Chr(13) & "" & Chr(10) & " #""Höher gestufte Header"" = Table.PromoteHeaders(Quelle,

AW: Neuste Datei laden
08.03.2021 21:50:39
Tobias
Hallo Jörn,
nach Set objDateiNeuste = Nothing muss definitiv end function stehen, und dann deine ursprüngliche Sub load() nur mit der Änderung mit NeusterDateiname(), sonst musst du nochmal genauer den Code und die Fehlermeldung angeben die du jetzt gerade hast.
Schöne Grüße
Tobias

Anzeige
AW: Neuste Datei laden
06.03.2021 11:04:59
Jörn
sorry hatte das Kontrollkästchen nicht aktiviert

AW: Neuste Datei laden
08.03.2021 23:30:37
Yal
Hi Jörn,
ich habe für ein anderen Fall etwas aufgestellt, was dir auch hilflich sein kann.
Siehe https://www.herber.de/forum/archiv/1816to1820/t1818102.htm#1818462
Aus einem Verzeichnis die neueste csv-Datei öffnen. Zwei einfache PQ. Die zweite für den csv müsstest Du noch zu deinem Thema anpassen. Wahrscheinlich in Kombi mit andern Tipps aus dem Thread.
VG
Yal

AW: Neuste Datei laden
09.03.2021 10:14:09
Jörn
Hallo Yal, hallo Tobias,
vielen Dank,
ich habe jetzt meinen Sohn aktiviert, der will jetzt mal sein Glück damit versuchen. Ich gehe davon aus, dass er es schafft und aktiviere das Kontrollkästchen nicht.
Yal, ich leite ihm auch noch einmal deine Lösung mit PQ weiter, vielleicht bekommen es ja son&friends hin.
Herzlichen Dank nochmals für euere Hilfe.
Gruß
Jörn

Anzeige
AW: Neuste Datei laden
05.03.2021 08:43:29
Jörn
Hallo Yal,
ja, es ist wirklich schade, aber ich bin damit überfordert deine gute Lösung bei mir einzubauen.
Nochmals vielen Dank
Gruß
Jörn

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige