Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.04.2024 18:57:33
17.04.2024 16:56:58
Anzeige
Archiv - Navigation
1728to1732
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

Timer-Steuerelement

Timer-Steuerelement
12.12.2019 11:22:42
Sven
Hallo zusammen,
mit
Application.Wait(Now + TimeValue("00:00:03"))

lasse ich das System drei Sekunden pausieren. Klappt.
Wenn ich aber eine Anzeige auf einem Userform nach drei Sekunden verschwinden lassen, den Anwender aber weiter arbeiten lassen möchte, ist das doof. Gibt es eine Möglichkeit eines Timers, dem ich nach Ablauf eine Aktion geben kann und der nichts blockiert? Unter VisualBasic gibt es doch so ein Timer-Steuerelement, oder?
Grüße
Sven

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Timer-Steuerelement
12.12.2019 12:37:14
Sven
Wow, kannte ich nicht. Danke!
Und warum bekomme ich hier ein "Das Makro kann nicht ausgeführt werden, da es möglicherweise nicht verfügbar ist."?
Sub ufMessageHide()
frmInfo.Visible = False
End Sub
Sub ufMessage(strMessage As String, intStyle As Integer)
lblInfo.Caption = strMessage
Select Case intStyle
Case 1
lblInfo.BackColor = &HC0FFC0
frmInfo.BackColor = &HC0FFC0
Case 2
lblInfo.BackColor = &HC0FFFF
frmInfo.BackColor = &HC0FFFF
Case 3
lblInfo.BackColor = &H80C0FF
frmInfo.BackColor = &H80C0FF
End Select
With frmInfo
.Visible = True
.ZOrder (0)
End With
Application.OnTime Now + TimeValue("00:00:03"), "ufMessageHide"
End Sub

Anzeige
AW: Timer-Steuerelement
12.12.2019 13:17:02
Matthias
Moin!
Der Code, welcher im Application.OnTime aufgerufen wird, muss in einem Extra Modul stehen und nicht im Klassenmodul der UF. Und rufe dort besser das hier auf.
Sub ufMessageHide()
frmInfo.hide
End Sub

Und du musst schauen, dass deine UF nicht modal sind. Sonst dürfte es m.E. nicht gehen, da die UF im Vordergrund alles abblockt.
VG
AW: Timer-Steuerelement
12.12.2019 13:25:57
Sven
Hallo Matthias,
danke. Ich habe die Hide-Prozedur in ein Modul verschoben. Warum das nicht im UserForm-Modul stehen darf, verstehe ich aber nicht. Du?
Mein Userform ist nicht modal - insoweit alles gut.
frmInfo ist ein Frame (mit Label) auf dem UserForm. M.E. funktioniert da kein hide(). Welchen Vorteil siehst Du hier?
Grüße
Sven
Anzeige
AW: Timer-Steuerelement
12.12.2019 14:07:44
Matthias
Moin!
Ich glaube das hat damit zu tun, dass UF eigentlich auch Klassen sind und keine normalen Module. Und da Klassen meist gekapselt sind bzw. nicht alles nach außen zeigen, hat man das da wohl auch mit übernommen und läst da keinen Zugriff auf Klassen zu (auch wenn du eigentlich alle Elemente der UF auch von außerhalb ansprechen kannst - also keie wirkliche Kapselung).
Bzgl. der frm dachte ich, dass es ein Userform ist, was verschwinden soll. HAtte "Anzeige auf Userform" überlesen und war hier nach gegangen https://www.ms-office-forum.net/forum/showthread.php?t=105285 (Punkt 7.1), wonach frm für Form steht. DAnn sollte natürlich dein visible passen.
VG
Anzeige
AW: Timer-Steuerelement
12.12.2019 14:21:47
Sven
Okay, "frm" habe ich irgendwie immer als Frames, "uf" als UserForm. Aber sei's drum.
Vielen Dank für die Hilfe. Einen kleinen Bug habe ich noch - vielleicht kannst Du da ja auch beistehen:
Ich habe jetzt also die Prozedur zum Anzeigen der Message:
Sub ufMessage(strHeadline As String, strMessage As String, intStyle As Integer, Optional  _
blnAutoHide = True)
Call ufMessageHide
lblInfo1.Caption = strHeadline
lblInfo2.Caption = strMessage
Select Case intStyle
Case 1
lblInfo1.BackColor = &HC0FFC0
lblInfo2.BackColor = &HC0FFC0
frmInfo.BackColor = &HC0FFC0
Case 2
lblInfo1.BackColor = &HC0FFFF
lblInfo2.BackColor = &HC0FFFF
frmInfo.BackColor = &HC0FFFF
Case 3
lblInfo1.BackColor = &H80C0FF
lblInfo2.BackColor = &H80C0FF
frmInfo.BackColor = &H80C0FF
End Select
With frmInfo
.Visible = True
.ZOrder (0)
End With
If blnAutoHide = True Then
Application.OnTime Now + TimeValue("00:00:05"), "ufMessageHide"
blnMessageHidePending = True
End If
End Sub
Und die Prozedur (in einem anderen Modul) zum Ausblenden:
Sub ufMessageHide()
ufMain.frmInfo.Visible = False
If blnMessageHidePending = True Then
Application.OnTime Now + TimeValue("00:00:05"), "ufMessageHide", , False
blnMessageHidePending = False
End If
End Sub
Jetzt habe ich testweise zwei Schaltflächen:
Private Sub CommandButton1_Click()
Call ufMessage("Testnachricht Typ 1", "Blablablablablablablablabla" & vbCrLf & vbCrLf & "( _
verschwindet automatisch)", 1, True)
End Sub
und
Private Sub CommandButton2_Click()
Call ufMessage("Testnachricht Typ 2", "Blablablablablablablablabla" & vbCrLf & "lknmghklä _
ghklmgh", 2, False)
End Sub
Die erste Schaltfläche zeigt die Meldung also an und blendet sie nach fünf Sekunden aus.
Bei der zweiten Schaltfläche wird nicht automatisch ausgeblendet.
Für sich alleine klappt das.
Aber: Klicke ich auf die erste Schaltfläche (Timer startet also) und vor Ablauf des Timers auf die zweite Schaltfläche, hätte ich erwartet, dass der Timer durch das Schedule = false angehalten wird und die zweite Message nicht mehr verschwindet. Stattdesen bekomme ich einen "Laufzeitfehler 1004 - Die Methode 'OnTime' für das Objekt '_Application' ist fehlgeschlagen".
Kannst Du das nachvollziehen?
Grüße
Sven
Anzeige
AW: Timer-Steuerelement
12.12.2019 15:12:16
Matthias
Moin!
DAs liegt daran, dass sich das System die Zeit vom Aufruf merkt. Bspw. erfolgt ein Aufruf bei 15 Uhr und 5 Sekunden (schin mit Versatz aus dem Code). Wenn du dann in der SChleife ankommst und die OnTime aufheben willst, nimmst du wieder die Zeit. Nun sind aber ein paar Sekunden vergangen. Also 15 Uhr und 3 Sekunden plus die 5 Sekunden. ALso sucht das Programm, ob es einen Aufruf bei 15 Uhr und 8 Sekunden findet. Da ist aber nix. Deshalb der Fehler. Wenn du OnTime aufrufst, dann speichere dir die aufrudende Zeit in einer Variablen und nimmt die zum Löschen (also erst zuweisen und dann an den Aufruf übergeben und später darauf wieder zugreifen). Auf alle Fälle nicht neu berechnen. Das geht meist schief.
VG
Anzeige
AW: Timer-Steuerelement
12.12.2019 15:20:13
Sven
Das wars. Super. Danke.

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige