MS-Office-Forum
Google
   

Zurück   MS-Office-Forum > Microsoft Office > Microsoft Excel
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads Der Renner, 11 Entwicklertools für Access, Tipps & Trick und offene Datenbanken zum einzigartigen Preis.
Themen-Optionen Ansicht
Alt 04.01.2018, 11:05   #1
Office_user
Neuer Benutzer
Neuer Benutzer
Standard VBA - Aktuellste .txt-Datei öffnen und in andere Excel-Mappe kopieren

Hallo zusammen,

bin absoluter VBA-Neuling und habe folgendes vor:

Möchte aus einem Verzeichnis immer die aktuellste Version einer .txt-Datei öffnen und diese in eine andere Excel-Mappe kopieren (soll dann eine Makro-Vorlage werden), um sie dort weiterbearbeiten zu können.

Einen Code für das Finden und Öffnen der aktuellsten Version hab ich im Netz schon gefunden:
Sub Aktuellste_Datei_öffnen()
Const strPath As String = "U:Archiv"
Dim strFile As String, strFile2Open As String, dteFile As Date, dteLast As Date
strFile = Dir$(strPath & "*.txt")
If strFile <> "" Then
Do
dteFile = FileDateTime(strPath & strFile)
If dteFile > dteLast Then
strFile2Open = strFile
dteLast = dteFile
End If
strFile = Dir$
Loop Until strFile = ""
Workbooks.Open strPath & strFile2Open
Else
MsgBox "No matching file found"
End If
End Sub
Wie muss ich diesen Code nun ergänzen, damit der Inhalt der (aktuellsten) .txt-Datei kopiert und in der anderen Mappe eingefügt wird?

Bin für eure Hilfe sehr dankbar.
Office_user ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 04.01.2018, 11:26   #2
Jonas0806
MOF User
MOF User
Standard

Hallo,

was genau meinst Du damit? Grundsätzlich kannst Du das txt-File auch direkt in eine entsprechende Mappe importieren, dazu einfach mal den Makrorekorder laufen lassen.

__________________

Gruß Jonas
Jonas0806 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 04.01.2018, 11:32   #3
lupo1
MOF Koryphäe
MOF Koryphäe
Standard

Auch wenn der Duden etwas anderes behauptet/erlaubt:

Es gibt nur aktuell. Nicht aktuellst. Denn sonst wäre aktuell nicht mehr aktuell.

__________________

MfG Lupo - und ein Hallo ebenfalls!
lupo1 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 04.01.2018, 11:59   #4
Office_user
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo Jonas,

das mit dem Direktimport hab ich schon probiert. Wie bekomm ich das aber hin, dass dann immer die aktuelle (so o.k. lupo?) Version geladen wird, wenn ich das als Makro aufnehme?
Office_user ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 04.01.2018, 12:22   #5
H_E_K
MOF User
MOF User
Standard

Ja, wo hast du den Code denn her???
Da stimmt ja gar nichts. Gehe ich recht in der Annahme, dass du ihn noch überhaupt nicht getestet hast?

Nun zu einer Lösung, die noch dazu viel flexibler ist. Du wählst nämlich die zu ladende Datei in einem Auswahlfenster selbst aus. Dann wird der Dateiinhalt in eine Variable geladen und testweise im Direkt-Fenster des VBA-Editors ausgegeben. Danach kannst du den Text in VBA noch bearbeiten und in den richtigen Zellbereich eines bestimmten Sheets setzen. Eine Textdatei einfach mit Excel zu öffnen, ist eher (sorry) die dümmste Lösung.
Also, so geht es:
Code:

Public varDatei As Variant
Public Textihnalt As Variant
Sub OeffneDatei()
'Datei auswählen
    varDatei = Application.GetOpenFilename()
    If varDatei = False Then Exit Sub
'Datei einlesen
On Error GoTo Fehler
Textihnalt = ""
    Const ForReading = 1, ForWriting = 2, ForAppending = 3
    Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
    Dim fs, f, ts, s
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFile(varDatei)
    Set ts = f.OpenAsTextStream(ForReading, 0)
    Textihnalt = ts.Readall
    Debug.Print Textihnalt
    ts.Close
Exit Sub

Fehler:
    Debug.Print Err.Number, Error(Err.Number)
    Stop
End Sub

__________________

Gruß
Hans


Mit VBA löst du jedes Problem - und schaffst mindestens zwei neue ...
Windows 7 Pro, Windows 10 Home, Office 2013 H&S
H_E_K ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 04.01.2018, 13:14   #6
Office_user
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo Hans,

habe deinen Code mal getestet. Komme aber nur bis zum Auswahlfenster, wähle dann die txt-Datei aus u. dann passiert weiter nix. Muss ich im Code noch was abändern/ anpassen? (sag ja - totaler Neuling - bring mir das grad nur mit trial and error bei)
Office_user ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 04.01.2018, 13:24   #7
H_E_K
MOF User
MOF User
Standard

Zitat: von Office_user Beitrag anzeigen

Hallo Hans,

habe deinen Code mal getestet. Komme aber nur bis zum Auswahlfenster, wähle dann die txt-Datei aus u. dann passiert weiter nix. Muss ich im Code noch was abändern/ anpassen? (sag ja - totaler Neuling - bring mir das grad nur mit trial and error bei)

Dann hast du das Direktfenster nicht geöffnet. Drücke Strg G und schaue dir den Inhalt der Textdatei an. Wenn du ihn weiter verarbeiten willst - er steht in der Variablen "Textinhalt". (Der im Code Allerdings dank des Tippfehlerteufelchens "Textihnalt" heißt)

__________________

Gruß
Hans


Mit VBA löst du jedes Problem - und schaffst mindestens zwei neue ...
Windows 7 Pro, Windows 10 Home, Office 2013 H&S

Geändert von H_E_K (04.01.2018 um 13:25 Uhr). Grund: Tippfehler
H_E_K ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 04.01.2018, 13:26   #8
Jonas0806
MOF User
MOF User
Standard

Hallo Hans,

also das Gelbe vom Ei ist Dein Code jetzt auch nicht, nachdem Du so auf "die Kacke gehaun" hast^^

__________________

Gruß Jonas
Jonas0806 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 04.01.2018, 13:27   #9
H_E_K
MOF User
MOF User
Standard

Zitat: von Jonas0806 Beitrag anzeigen

Hallo Hans,

also das Gelbe vom Ei ist Dein Code jetzt auch nicht, nachdem Du so auf "die Kacke gehaun" hast^^

Du bist hier der Spezialist für starke Sprüche, das ist mir nicht entgangen.
Aber der Code funktioniert einwandfrei.

__________________

Gruß
Hans


Mit VBA löst du jedes Problem - und schaffst mindestens zwei neue ...
Windows 7 Pro, Windows 10 Home, Office 2013 H&S
H_E_K ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 04.01.2018, 15:00   #10
Office_user
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo Hans,

Direktfenster geöffnet - Inhalt ok. Würde ihn gern weiterverarbeiten in Excel- aber wie muss ich die Variable anpassen??
Office_user ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 04.01.2018, 15:17   #11
H_E_K
MOF User
MOF User
Standard

Zitat: von Office_user Beitrag anzeigen

Hallo Hans,

Direktfenster geöffnet - Inhalt ok. Würde ihn gern weiterverarbeiten in Excel- aber wie muss ich die Variable anpassen??

Oh, jetzt geht es an die Basics. Ich kann hier doch keinen Grundkurs in VBA erteilen, auch ich lerne seit über 10 Jahren täglich dazu.
Bemühe doch einmal deine Suchmaschine mit den Stichwort-Kombinationen
  • vba string operationen
  • vba zelle ansprechen
und ähnlichem.
Der Text liegt in der Variablen komplett in einem Stück vor. Den wirst du vielleicht nicht nur in eine Zelle setzen wollen, sondern sinnvoll auf dem Sheet platzieren. Dafür muss der Text unterteilt werden. Es gibt Funktionen zum Finden von Text im Text, zum Kopieren bestimmter Teile, usw. Eigne dir das selbst an, dabei lernst du auch viel mehr!
Was oft hilft, ist die Makro-Aufzeichnung. Dafür musst du im Menueband über dem Sheet die Registerkarte "Entwicklertools" einblenden. Starte dann daraus die Makroaufzeichnung, nimm bestimmte Operationen auf dem Sheet vor, und beende die Aufzeichnung. Dann siehst du im VBA-Editor, wie deine Schritte in VBA-Code aussehen. Der ist zwar meist sehr aufgeblasen, das geht immer viel kürzer, aber du lernst dadurch viel über VBA.

__________________

Gruß
Hans


Mit VBA löst du jedes Problem - und schaffst mindestens zwei neue ...
Windows 7 Pro, Windows 10 Home, Office 2013 H&S
H_E_K ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 04.01.2018, 15:50   #12
Jonas0806
MOF User
MOF User
Standard

Hallo,

Zitat: von H_E_K Beitrag anzeigen

Du bist hier der Spezialist für starke Sprüche, das ist mir nicht entgangen.


Wie ich zu diesem Ehrentitel gelange ist mir tatsächlich nicht ganz bewusst, aber sei Es wie Es sei

Zugegeben, meine Antwort war schon etwas schnippig, aber keinesfalls böse gemeint.

Mir sind da nur einige Dinge, wie Ort der Variablendeklaration, Scope der Variablen, Einrückung, um nur einige zu nennen, aufgefallen. Ich persönliche finde das dann, gerade wenn man selbst am lernen ist schade, gewisse Konventionen zu "ignorieren". Sicher, Dein Code funktioniert, aber einige Sachen erschließen sich mir nicht wirklich.

Das ist natürlich meine persönliche Meinung.

Wenn ich auch einen Vorschlag in den Raum werfen darf, ich würde das wahrscheinlich so angehen (Ohne, dass die Datei von Hand ausgewählt werden muss).

Code:

Sub dateiImportieren()
    Dim fsoFile, arr
    Dim juengsteDatei As String
    Dim datum As Long
    
    With CreateObject("scripting.filesystemobject")
        For Each fsoFile In .GetFolder("C:").Files
            With fsoFile
                If Right(.Name, 4) = ".txt" Then
                    If .DateLastModified > datum Then
                        datum = .DateLastModified
                        juengsteDatei = .Path
                    End If
                End If
            End With
        Next fsoFile
        If juengsteDatei = "" Then MsgBox "No matching file found": Exit Sub
        On Error Resume Next
        arr = Split(.OpenTextFile(juengsteDatei).ReadAll & vbCrLf, vbCrLf)
        If Err Then MsgBox "Die Datei " & juengsteDatei & " ist leer!": Exit Sub
    End With
    Tabelle1.Cells(1, 1).Resize(UBound(arr), 1) = Application.Transpose(arr)
End Sub
Der Code schreibt jede Zeile in eine Zelle untereinander. Alternative wäre natürlich auch die Datei zu importieren oder auch mit Text in Spalten aufzuteilen. Möglichkeiten gibt es da viele. (Wir wissen ja nicht, wie Dein Ziel aussegen soll)

Es sei noch darauf hingewiesen, dass der Code in einen Fehler rennt, wenn es keine txt-Datei gibt, oder diese leer ist. Wenn Du die Datei selber aussuchen möchtest (Wie schon von Hans gezeigt) geht es auch kürzer.

Zum Schluss noch, Hans hat natürlich Recht damit, dass Du Dir die Basics mal zu Gemüte führen solltest. Dazu gibt es im Netz einige, kostenlose, Tutorials.

__________________

Gruß Jonas
Jonas0806 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 05.01.2018, 10:48   #13
Jonas0806
MOF User
MOF User
Standard

Hallo nochmal,

hier noch ein etwas kürzerer (wenn auch nicht unbedingt leichter zu verstehender) Ansatz.

Code:

Option Explicit

Sub dateiImportieren2()
    Dim arr
    Const pfad = "C:"
    
    arr = Split(CreateObject("wscript.shell").Exec("cmd /c dir " & pfad & "*.txt /b /od").StdOut.ReadAll, vbCrLf)
    If UBound(arr) < 1 Then MsgBox "No matching file found": Exit Sub
    Debug.Print pfad & arr(UBound(arr) - 1), 'Gibt den Pfad zu Deiner jüngsten *.txt-Datei aus
End Sub

__________________

Gruß Jonas
Jonas0806 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 05.01.2018, 13:17   #14
H_E_K
MOF User
MOF User
Standard

Zitat: von Jonas0806 Beitrag anzeigen

Code:

Option Explicit

Sub dateiImportieren2()
    Dim arr
    Const pfad = "C:"
    
    arr = Split(CreateObject("wscript.shell").Exec("cmd /c dir " & pfad & "*.txt /b /od").StdOut.ReadAll, vbCrLf)
    If UBound(arr) < 1 Then MsgBox "No matching file found": Exit Sub
    Debug.Print pfad & arr(UBound(arr) - 1), 'Gibt den Pfad zu Deiner jüngsten *.txt-Datei aus
End Sub

Allerdings muss er dann den Pfad ändern auf "U:Archiv".

__________________

Gruß
Hans


Mit VBA löst du jedes Problem - und schaffst mindestens zwei neue ...
Windows 7 Pro, Windows 10 Home, Office 2013 H&S
H_E_K ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 09.01.2018, 17:08   #15
Office_user
Threadstarter Threadstarter
Neuer Benutzer
Neuer Benutzer
Standard

Hallo Zusammen,

erstmal vielen Dank für eure Rückmeldungen.

Habe den Textdatei-Import mittlerweile mit folgendem Code (gefunden im Netz) gelöst:

Code:

Sub AktuellsteDateiOeffnen()
Dim strPfad As String
Dim strDatei As String
Dim strDateiAktuell As String
Dim wkbQ As Workbook
Dim wkbZ As Workbook

strPfad = "D:Test"

strDatei = Dir(strPfad & "*.xls", vbDirectory)
Do While strDatei <> ""
    If strDatei Like "*########.xls" Then
        If Val(Right(strDatei, 12)) > Val(Right(strDateiAktuell, 12)) Then
            strDateiAktuell = strDatei
        End If
    End If
    strDatei = Dir
Loop

If strDateiAktuell = "" Then
    MsgBox "Keine datei gefunden in..." & vbLf & vbLf & strPfad, , "Hinweis"
    Exit Sub
End If

Set wkbZ = ThisWorkbook
Set wkbQ = Workbooks.Open(strPfad & strDateiAktuell)
wkbQ.Worksheets(1).Copy Before:=wkbZ.Sheets(1)
wkbQ.Close False

End Sub
Habe diesen mittlerweile schon erweitert, dass ich den Text in Spalten bekomme.
Jetzt das nächste Problem:
Habe mehrere Spalten mit Datum, nach denen ich sortieren will. Datum bzw. Format wird aber erst erkannt, wenn ich die Zelle bearbeite u. mit Enter abschließe. Habe auch hierzu schon den passenden Code in diesem Forum gefunden:

Code:

Sub komische_sache()
Dim ar()
 ar() = Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row)
 For i = LBound(ar()) To UBound(ar())
    ar(i, 1) = CDate(ar(i, 1))
 Next
Range("A1:A" & Cells(Rows.Count, "A").End(xlUp).Row) = ar()
End Sub
Wie muss ich diesen Code verändern, um z.B. 3 Spalten damit anzusprechen?
Office_user ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:38 Uhr.


Partner und Co.
Access-Paradies -Alles rund um die Datenbank Microsoft Access -Code -Programme-Tools -Tipps   Kostenlose Tipps & Tricks, Downloads und Programme   www.kulpa-online.com - Tipps - Tricks - Tutorials - Meinungen - Downloads uvm...   vb@rchiv · Willkommen in der Welt der VB Programmierung   Access-Garhammer - Hier finden Sie jede Menge Beispiel-Datenbanken zu Access und mehr ...   mcseboard.de   Die Top Seite für Excel-VBA-Makros uvm.

Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

Copyright ©2000-2010 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günther Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.
Beachten Sie bitte auch unsere Nutzungsbedingungen.