AW: zeitgesteuerte Protokollierung - OnTime-Method
28.08.2012 15:17:10
fcs
Hallo Thilo,
das kann man mit der OnTime-Methode steuern.
So kann man auch bei Bedarf weiter in Excel arbeiten, während die Daten registriert werden. Es kann aber zu Verzögerungen kommen, wenn zum jeweilgen Start des Registriermakros eine Zelle editiert wird oder ein Dialog geöffnet ist.
Gruß
Franz
'Code in einem allgemeinen Modul
Option Explicit
Public datTime As Date
Public Const strOntimeProcedure = "subAktion" 'Name der per Timer gestarteten Procedur
Public Const strTimeDiff As String = "00:02:00" '0 Stunden 2 Minuten 0 Sekunden
Sub StartTimer()
Call subAktion
End Sub
Sub StopTimer()
On Error Resume Next 'falls Timer nicht gestartet wurde
Application.OnTime Earliesttime:=datTime, Procedure:=strOntimeProcedure, schedule:=False
End Sub
Sub subAktion()
Dim wb As Workbook
Dim wksData1 As Worksheet, wksData2 As Worksheet, wksProto As Worksheet
Dim ZeileP As Long
Set wb = ThisWorkbook
Set wksData1 = wb.Worksheets("Daten1")
Set wksData2 = wb.Worksheets("Daten2")
Set wksProto = wb.Worksheets("Protokoll")
datTime = Now
With wksProto
ZeileP = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
.Cells(ZeileP, 1).Value = CDate(Format(datTime, "YYYY-MM-DD"))
.Cells(ZeileP, 2).Value = CDate(Format(datTime, "hh:mm:ss"))
.Cells(ZeileP, 3).Value = wksData1.Range("C2").Value
.Cells(ZeileP, 4).Value = wksData1.Range("E27").Value
.Cells(ZeileP, 5).Value = wksData2.Range("F100").Value
.Cells(ZeileP, 6).Value = wksData2.Range("Y1223").Value
End With
datTime = datTime + CDate(strTimeDiff)
Application.OnTime Earliesttime:=datTime, Procedure:=strOntimeProcedure
End Sub
'Code unter DieseArbeitsmappe - erforderlich, damit OnTime-Aktion auf jede Fall gestoppt _
wird.
'wenn die Datei bevor die Datei geschlossen wird
Option Explicit
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call StopTimer
End Sub