hier geht es weiter aus der Thematik "Textdatei als Endlosschleife":
https://www.herber.de/cgi-bin/callthread.pl?index=1571273
https://www.herber.de/cgi-bin/callthread.pl?index=1523976
https://www.herber.de/cgi-bin/callthread.pl?index=1525132
https://www.herber.de/cgi-bin/callthread.pl?index=1528578
https://www.herber.de/cgi-bin/callthread.pl?index=1529873
Ich habe versucht den Code etwas zu straffen und "nutzlose" Dateizugriffe zu verhindern. Nur klappt es nicht so recht. Folgender Code funktioniert wunderbar:
'Start the loop
While MeasONOFF = 2
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
'Update Querytables
For Each qt In Import.QueryTables
On Error Resume Next
qt.Refresh (BackgroundQuery)
Next
B7 = ThisWorkbook.Sheets("Import").Range("B7")
'Write the old Import time into B7
For i = 1 To 3
ThisWorkbook.Sheets("Import").Cells(7, 3 * i - 1) = FileDateTime(Datei(i - 1))
Next i
If ThisWorkbook.Sheets("Import").Range("B7") B7 Then
'The Time of the Measurement File has changed
Einlesen
ThisWorkbook.Sheets("MAIN").Range("AF31") = n
n = 1
End If
n = n + 1
If MeasONOFF 2 Then
Call Beenden
End If
With Application
.ScreenUpdating = True
.EnableEvents = True
DoEvents
End With
Wend 'Restart the loop (While MeasONOFF = 2)
Aber in JEDEM Durchlauf findet das "Update Querytables" statt, dass heißt ein Dateizugriff. Diese Dateien ändern sich jedoch in Intervallen von 2 Sekunden aufwärts, so dass es nicht in jedem Zyklus ein Update machen müsste. Ich habe also versucht:
For i = 1 To 3
ThisWorkbook.Sheets("Import").Cells(7, 3 * i - 1) = FileDateTime(Datei(i - 1))
Next i
If ThisWorkbook.Sheets("Import").Range("B7") B7 Then
'The Time of the Measurement File has changed
'Update Querytables
For Each qt In Import.QueryTables
On Error Resume Next
qt.Refresh (BackgroundQuery)
Next
End If
Damit sollte er nur noch das Änderungsdatum der Datei prüfen. Aber nun kommts, ohne einen "Zugriff" auf die Datei (sei es über QueryTable oder auch über Workbook.Open) liefert mir die Funktion FileDateTime(Datei(i - 1)) nur noch ca. alle 10 Sekunden einen aktuellen Wert. Auch ein alternativer Versuch zu FileDateTime hat exakt das gleiche Resultat:
Dim fileModDate As String
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFile()
fileModDate = f.DateLastModified
Hat jemand eine Idee für dieses "merkwürdige Benehmen"?
Danke und Gruß,
Rainer