2016-11-29 10 views
1

Ich bin neu in Excel VBA. Ich mache ein Projekt mit Arduino und Gobetwino, um Sensoren Daten in eine Textdatei zu protokollieren. Um fortzufahren, muss ich ein Makro verwenden, um Daten aus der Textdatei nach Excel zu protokollieren und sie jedes Mal zu aktualisieren, wenn ich sie öffne oder das Makro ausführe.Wie Sie Textdatei in Excel VBA lesen und aktualisiert

11/28/2016 12:00:00 sensor triggered 
11/29/2016 00:00:05 sensor triggered 
11/29/2016 05:00:00 sensor triggered 

ich die neuesten Daten in erster Linie in Excel sehen muß: Zusätzlich Gobetwino wird mit Datum und Inhalt wie die folgenden Zeilen Daten in der Textdatei Zeile schreiben.

Kann mir jemand dabei helfen, VBA-Code zu schreiben?

+0

Müssen Sie die gesamte Datei nur beim Start oder bei jeder neuen Zeile neu laden? Laden Sie die gesamte Datei neu oder fügen Sie der Tabelle immer neue Zeilen hinzu. –

+1

Für den Update-Teil behalten: http://stackoverflow.com/questions/1586169/how-do-i-know-when-a-file-has-be-modified-in-a-vba-macro. Das hat schon eine Lösung da draußen :). – GELR

Antwort

0

Dies wird den Trick tun. Sie können es einer Schaltfläche oder einer Verknüpfung zuweisen - es aktualisiert Daten aus der Datei bei jedem Aufruf in umgekehrter Reihenfolge.

Sub reverseFile() 

    ' put the file into the same dir as spreasheet 
    Const FILE_NAME = "sensorData.txt" 

    Dim fileNum As Integer 
    Dim line As String 
    Dim c As New Collection 
    Dim a() As String 
    Dim i As Long 

    ' read file line-by-line 
    fileNum = FreeFile() 
    Open ThisWorkbook.Path & Application.PathSeparator _ 
      & FILE_NAME For Input As #fileNum 

    While Not EOF(fileNum) 
     Line Input #fileNum, line 
     c.Add line 
    Wend 

    Close #fileNum 

    ' reverse the input lines into array 
    ReDim a(1 To c.Count) 
    For i = LBound(a) To UBound(a): a(i) = c(c.Count - i + 1): Next i 

    ' display results in the spreadsheet 
    With Worksheets("Sheet1").[a1] 
     .CurrentRegion.Clear 
     .Resize(UBound(a), 1) = Application.Transpose(a) 
    End With 

End Sub 
+0

Vielen Dank! Ich studiere auch auf VBA. Kannst du mir sagen, welche Funktion hier die Daten aktuell halten? –

+0

Wenn Sie dies erneut aufrufen, wird die gesamte Liste aus der Datei aktualisiert, d. H. Es wird immer eine vollständige Datei geladen. Dies kann ziemlich große Dateien schnell verarbeiten - Sie werden wahrscheinlich keine Probleme mit bis zu ~ 5-700000 Datensätzen haben. Wenn Sie jedoch nur die neuesten Updates laden möchten, merken Sie sich die Position in der Datei und verwenden Sie den 'Seek'-Befehl, um nur die Änderungen zu lesen. –

+0

Es funktioniert perfekt. Danke für die Hilfe! –