VBA Tipp: Eine Meldung zeitgesteuert anzeigen

Aus DBWiki
Wechseln zu: Navigation, Suche

Anforderung

Ich möchte eine Meldung auf dem Bildschirm anzeigen, die sich nach einer vorgegebenen Zeit automatisch wieder schließt.

Lösung 1

  • Das geht mit einem selbstgebauten, kleinen Popupformular, das durch das Timer-Ereignis des Formulars gesteuert wird.
  • Eine Datenbank mit einem fertigen Beispiel kann hier heruntergeladen werden: Datei:Timerbox.zip. Der Meldungstext wird automatisch in Zeilen aufgeteilt.

Lösung 2

Verwendung der Popup-Methode des Windows Scripting Host.

  • Nachteil: Die OK-Schaltfläche kann nicht gelöscht werden.
  • Das TimerIntervall kann nur in ganzen Sekunden angegeben werden.
  • Bei Timerintervall 0 bleibt die Meldung stehen, und verhält sich wie eine normale MsgBox.
Public Sub MeldungAnzeigen(ByVal Meldung As String, _
                           Optional ByVal TimerIntervall_sec As Long = 0, _
                           Optional ByVal Titel As String = vbNullString, _
                           Optional ByVal Buttons As VbMsgBoxStyle = vbOKOnly)
 
 'Late Binding: Kein Verweis auf "Microsoft Scripting Runtime" und
 'kein Verweis auf "Windows Script Host Object Model" notwendig
 'Quelle: http://www.dbwiki.net/
 
 Dim FSO As Object   'FileSystemObject
 Dim WSH As Object   'Windows Scripting Host (WSH als Variablenname erzeugt Fehler)
 Dim Datei As Object 'TextStream
 Dim tempDatei As String
 Const TemporaryFolder = 2
 
 Set FSO = CreateObject("Scripting.FileSystemObject")
 Set WSH = CreateObject("Wscript.Shell")
 
 'Datei erzeugen
 'Der Name der vbs-Datei ist egal, nur die Dateiendung .vbs ist ausschlaggebend
 tempDatei = FSO.GetSpecialFolder(TemporaryFolder).Path & "\@egal#.vbs"
 Set Datei = FSO.CreateTextFile(tempDatei, True)
 
 'in Datei schreiben (WSH als Variablenname erzeugt einen Fehler)
 Datei.WriteLine "Set WSS = CreateObject(""Wscript.Shell"")"
 Datei.WriteLine "WSS.Popup """ & Meldung & """," & _
                                  TimerIntervall_sec & ",""" & _
                                  Titel & """, " & _
                                  Buttons
 Datei.Close
 
 'vbs-Datei ausführen
 WSH.Run tempDatei, 1, True
 
 'temporäre Datei löschen
 FSO.DeleteFile tempDatei, True
 
End Sub

Aufruf Lösung 2

 'Beispiel 1: Meldung, ohne Titel, 2 Sekunden anzeigen
 Call MeldungAnzeigen("Ich bin in 2 Sekunden weg.", 2)
 
 'Beispiel 2: Meldung, mit Titel, mit Informations-Symbol, 3 Sekunden anzeigen
 Call MeldungAnzeigen("Ich bin in 3 Sekunden weg.", 3, "Mein Titel", vbInformation)

Wiki-Links

Datei:Timerbox.zip Timer-gesteuertes Popup-Formular, das eine Meldung auf dem Bildschirm anzeigt, und sich nach einer vorgegebenen Zeit automatisch schließt.