Hallo Tim,
hier die 2. Lösung.
Hierbei werden, je nachdem wie lange noch bis zur Alarm-Zeit ist, bis zu 2 Timer gestartet.
1. Timer startet (einmal) z.B. 1 Stunde vorher und veranlasst das einfärben der Zelle in z.B. Gelb
2. Timer wird dann (einmal) aufgerufen wenn die Alarm-Zeit erreicht ist. Hier wird dann ein 3. Timer gestartet, der für das Blinken zuständig ist.
Das schöne an der Methode ist, es wird, vor der Alarm-Zeit, nicht ständig irgendein Code ausgeführt.
Auch hier gelten die Vorraussetzungen wie bei der 1. Methode
Es muss eine Checkbox (Name CheckBox1) auf dem 1. Blatt vorhanden sein.
Derzeit wird die Zelle B4 abgefragt, kann man aber im "Start" Makro ändern
In VBA unter "DieseArbeismappe" folgenden Code einfügen
Option Explicit
Private Sub Workbook_Open()
If Sheets(1).CheckBox1.Value Then
Start
faerben
TimerSetzen
End If
End Sub
In das Code-Fenster des 1. Blattes
Option Explicit
Private Sub CheckBox1_Click()
Start
faerben
TimerSetzen
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Alarm) Is Nothing Then
Me.CheckBox1.Value = 1
End If
End Sub
Und in ein Modul dann
Option Explicit
Public WarnFarbe As Long
Public AlarmFarbe As Long
Public WarnZeit As Long ' in Sek
Public Alarm As Range
Public Sub Timer1()
If Sheets(1).CheckBox1.Value Then faerben
End Sub
Public Sub Timer2()
If Sheets(1).CheckBox1.Value Then
faerben
Application.OnTime Now + TimeSerial(0, 0, 1), "Timer3"
End If
End Sub
Public Sub Timer3()
If Sheets(1).CheckBox1.Value Then
faerben
Application.OnTime Now + TimeSerial(0, 0, 1), "Timer3"
End If
End Sub
Public Sub Start()
WarnFarbe = RGB(256, 256, 0)
AlarmFarbe = RGB(256, 0, 0)
WarnZeit = 10
Set Alarm = Sheets(1).Range("B4")
End Sub
Public Sub faerben()
If DateDiff("s", Time, Alarm) <= WarnZeit And DateDiff("s", Time, Alarm) > 0 Then
Alarm.Interior.Color = WarnFarbe
ElseIf DateDiff("s", Time, Alarm) < 0 Then
If Alarm.Interior.Color = AlarmFarbe Then
Alarm.Interior.Pattern = xlNone
Else
Alarm.Interior.Color = AlarmFarbe
End If
Else
Alarm.Interior.Pattern = xlNone
End If
End Sub
Public Sub TimerSetzen()
If DateDiff("s", Time, Alarm) > WarnZeit Then
Application.OnTime DateAdd("s", -WarnZeit, Alarm), "Timer1"
End If
If DateDiff("s", Time, Alarm) > 0 Then
Application.OnTime Alarm, "Timer2"
Else
Application.OnTime Now + TimeSerial(0, 0, 1), "Timer3"
End If
End Sub
Gruß Markus
|