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

Text Dateiname und Grösse in Zelle schreiben

Text Dateiname und Grösse in Zelle schreiben
24.04.2016 08:18:56
Luzi67

Guten Morgen liebe Excel Gemeinschaft …
Leider komme ich mit meinem Projekt wieder ins straucheln.
Folgendes ..
Mit diesem Makro lese ich eine Text Datei ein.
Sub VerCatMan()
Cells(33, 16) = " Datei Selektieren "
ActiveWorkbook.RefreshAll
Cells(33, 16) = " "
Soweit so gut, Daten können verarbeitet werden.
Jetzt möchte ich aber während der Ausführung den Namen und die Größe usw.
der Text Datei in mehreren Zellen Schreiben. Die Text Datei wird alle 30 sec Aktualisiert
und nimmt an Größe zu.
Dieses Makro habe ich im Web gefunden.
Dim twb As Workbook
Dim objFSO As Object
Dim objFile As Object
Dim str As String
Set twb = ThisWorkbook
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.GetFile(twb.Path & "\" & twb.Name)
With Sheets("Tabelle1")
.Range("AD1") = "Erstellt am: " & objFile.DateCreated
.Range("AD2") = "Letzter Zugriff: " & objFile.DateLastAccessed
.Range("AD3") = "Zuletzt geändert: " & objFile.DateLastModified
.Range("AD4") = "Dateiname: " & objFile.Name
End With
Wie kann ich Excel dazu bringen meine Text Datei auszulesen. Denn mit diesem Makro zeigt er mir nur die Aktuelle Excel Datei an. Wichtig ist für mich, dass er den Pfad zu der Text Datei erkennt.
Grüsse Luzi67

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Text Dateiname und Grösse in Zelle schreiben
24.04.2016 09:46:05
Fennek
Hallo,
die ersten Ansätze sind ja schon da. Als nächsten Schritt könnstest du mit laufenden Makro-Rekorder folgendes eingeben:
Datei öffnen *.txt, die Trennzeichen eingeben.
Direkt im vba-Fenster geht
Workbooks.opentext(....)
und sehr genau die Vorschläge für die Patameter achten.
Mfg
(ungeprüft, pc noch aus)

AW: Text Dateiname und Grösse in Zelle schreiben
24.04.2016 12:43:21
Nepumuk
Hallo,
da ich deine Mappe nicht kenne, nur ein Beispiel:
Public Sub Test()
    Dim strFile As String
    strFile = Mid$(Tabelle1.QueryTables.Item(1).Connection, 6)
    MsgBox strFile & " / " & FileLen(strFile) & " Byte"
End Sub

Gruß
Nepumuk

Anzeige
AW: Text Dateiname und Grösse in Zelle schreiben
24.04.2016 13:24:20
Luzi67
Hallo Nepumuk
Das geht schon in die richtige Richtung. Mal schauen wie ich das in meinen
Programm integrieren kann.
Herzlichen Dank
Luzi67

AW: Text Dateiname und Grösse in Zelle schreiben
24.04.2016 16:21:32
Luzi67
Hallo Nepumuk
Eine frage hätte ich noch..
Dim strFile As String
strFile = Mid$(Tabelle1.QueryTables.Item(1).Connection, 6)
Cells(2, 16) = strFile
Cells(2, 22) = FileLen(strFile) & " Byte"
Cells(2, 24) = FileDateTime(strPath & strFile)
soweit alles gut, er zeigt mir Datei , Dateigröße und Datum/Zeit der letzten Änderung an.
Gib es noch einen Befehl , wo er mir das Erstellung´s Datum der Datei anzeigt ?
Habs versucht mit FileDateCreate(StrPath & strFile) , gibt aber Fehlermeldung.
Wäre supernett wenn du mir noch mal aus der Patsche hilfst .
Grüß Luzi67

Anzeige
AW: Text Dateiname und Grösse in Zelle schreiben
24.04.2016 17:46:42
Nepumuk
Hallo,
dazu kannst du folgende Funktion benutzen (keine Angst vor dem Code der ist 100mal schneller als der Umweg über das FileSystemObject):
Option Explicit

Private Declare PtrSafe Function GetFileTime Lib "kernel32.dll" ( _
    ByVal hFile As LongPtr, _
    ByRef lpCreationTime As FILETIME, _
    ByRef lpLastAccessTime As FILETIME, _
    ByRef lpLastWriteTime As FILETIME) As Long
Private Declare PtrSafe Function CreateFileA Lib "kernel32.dll" ( _
    ByVal lpFileName As String, _
    ByVal dwDesiredAccess As Long, _
    ByVal dwShareMode As Long, _
    ByRef lpSecurityAttributes As Long, _
    ByVal dwCreationDisposition As Long, _
    ByVal dwFlagsAndAttributes As Long, _
    ByVal hTemplateFile As LongPtr) As LongPtr
Private Declare PtrSafe Function CloseHandle Lib "kernel32.dll" ( _
    ByVal hObject As LongPtr) As Long
Private Declare PtrSafe Function FileTimeToSystemTime Lib "kernel32.dll" ( _
    ByRef lpFileTime As FILETIME, _
    ByRef lpSystemTime As SYSTEMTIME) As Long
Private Declare PtrSafe Function FileTimeToLocalFileTime Lib "kernel32.dll" ( _
    ByRef lpFileTime As FILETIME, _
    ByRef lpLocalFileTime As FILETIME) As Long

Private Type FILETIME
    dwLowDateTime As Long
    dwHighDateTime As Long
End Type

Private Type SYSTEMTIME
    wYear As Integer
    wMonth As Integer
    wDayOfWeek As Integer
    wDay As Integer
    wHour As Integer
    wMinute As Integer
    wSecond As Integer
    wMilliseconds As Integer
End Type

Private Const GENERIC_WRITE As Long = &H40000000
Private Const OPEN_EXISTING As Long = 3&
Private Const FILE_SHARE_READ As Long = &H1
Private Const FILE_SHARE_WRITE As Long = &H2

Public Function CreateFiletime(ByVal pvstrPath As String) As Date
    
    Dim udtFileTime1 As FILETIME, udtFileTime2 As FILETIME, udtFileTime3 As FILETIME
    Dim udtLocalTime As FILETIME, udtSystemTime As SYSTEMTIME
    Dim lngptrHandle As LongPtr
    
    lngptrHandle = CreateFileA(pvstrPath, GENERIC_WRITE, FILE_SHARE_READ Or _
        FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0&, 0)
    
    ' 1 = Erstellt , 2 = letzter Zugriff , 3 = geändert
    Call GetFileTime(lngptrHandle, udtFileTime1, udtFileTime2, udtFileTime3)
    
    Call CloseHandle(lngptrHandle)
    
    Call FileTimeToLocalFileTime(udtFileTime1, udtLocalTime)
    Call FileTimeToSystemTime(udtLocalTime, udtSystemTime)
    
    With udtSystemTime
        CreateFiletime = DateSerial(.wYear, .wMonth, .wDay) + _
            TimeSerial(.wHour, .wMinute, .wSecond)
    End With
End Function

Einfach so anzuwenden: Cells(2, 26) = CreateFiletime(strFile)
Gruß
Nepumuk

Anzeige
AW: Text Dateiname und Grösse in Zelle schreiben
24.04.2016 21:02:17
Luzi67
Hallo Nepumuk
Vielen Dank für deine Bereitschaft.
Konnte aber den Code nicht anpassen. Zu wenig Erfahrung -.-
Der Ansatz von Firmus (siehe unten im Thread) kam der Sache schon ziemlich nahe.
wünsche dir noch einen schönen rest Sonntag .
Grüße Luzi67

AW: Text Dateiname und Grösse in Zelle schreiben
24.04.2016 13:14:34
Fennek
Hallo,
Ich hatte verstanden, dass du den Inhalt einer Textdatei möchtest.
Um die Informationen über Datei zu erhalten, gibt es Parameter des fso-Objektes (wie in deinem Code), die Könner öffenen in vba eine Shell, mein Weg ist dagegen uralt: rechte Maustaste auf das windows-icon, ausführen - cmd.exe.
Danach mit dir [Taste 'größer] c:\temp\meine_Datei.txt
Diese Text-Datei importiere ich dann in excel.
Mfg

Anzeige
AW: Text Dateiname und Grösse in Zelle schreiben
24.04.2016 13:28:15
Luzi67
Hallo Fennek
Danke für dein bemühen. Habe einen Ansatz , siehe oben. Mal schauen
ob es so klappt. Werde dann über Erfolg und Misserfolg schreiben :-)
Schönen Sonntag noch
Luzi67

AW: Text Dateiname und Grösse in Zelle schreiben
24.04.2016 18:37:33
Firmus
Hi Luzi67,
ich nehme an, dass Du beobachten willst wie eine Datei wächst (Größe) und jeweils den Zeitpunkt der einzelnen Beobachtung festhalten.
Wie die Datei heißt, und in welchem Pfad sie liegt willst Du auch wissen.
Das soll automatisch über n Zyklen ablaufen.
Das Ergebnis soll in einer Liste festgehalten sein.
Falls diese Annahme stimmt, hier ein Beispiel
https://www.herber.de/bbs/user/105192.xlsm
Ich nehme an es passt (denke positiv)
Gruß
Firmus

Anzeige
AW: Text Dateiname und Grösse in Zelle schreiben
24.04.2016 20:54:37
Luzi67
Hallo Firmus
Ja, das war gut ^^. Hab den Code entsprechend angepasst. Paar Testläufe und das Ergebnis wie ich es wollte.
Hier noch mal der Code
Dim strFile As String ' Dateiinfo
strFile = Mid$(Tabelle1.QueryTables.Item(1).Connection, 6) ' info
'Cells(2, 16) = strFile ' info
'Cells(2, 22) = FileLen(strFile) & " Byte" ' info
'Cells(2, 24) = FileDateTime(strPath & strFile) ' info
Dim objFSO As Object
Dim objFile As Object
Dim Pfad As String, Zieldatei As String, tmpC1 As String
Dim lRow As Long, icol As Long, x As Long, iVal As Long, y As Long
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.getfile(strFile)
tmpC1 = objFile.Path
y = InStrRev(tmpC1, "\")
'Cells(2, 28) = objFile.Name
'Cells(3, 28) = Mid(objFile.Path, 1, y)
Cells(2, 16) = objFile.Path
'Cells(5, 28) = objFile.Type
Cells(2, 24) = objFile.DateCreated
'Cells(7, 28) = objFile.DateLastAccessed
Cells(2, 26) = objFile.DateLastModified
Cells(2, 22) = objFile.Size
lRow = lRow + 1
DoEvents 'Windowsblockade verhindern
'Application.Wait Now + TimeSerial(0, 0, 10) '10 Sekunden warten
Set objFSO = Nothing
Set objFile = Nothing
Sieht ein bissel wirr aus , aber mal schauen was ich noch rausnehmen kann..
hab Dank und schönen Abend noch..
Luzi67

Anzeige

362 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige