Schreibbüro Richter

Userform als Hinweis einblenden, der sich zeitgesteuert schließt und vom Benutzer nicht weggeklickt werden kann

Zur Benutzerführung möchte man gelegentlich einen Hinweis einblenden, der sich nach einer bestimmten Zeit von allein schließt. Dafür kann man die → selbstschließende MsgBox verwenden. Möchte man jedoch erreichen, dass sie eine gewisse Zeit angezeigt wird, ohne dass der Nutzer die Meldung vorzeitig (z. B. reflexartig) wegklicken kann, kann man dafür eine Userform verwenden, die nur eine Meldung ausgibt und sich dann selbst wieder schließt. Natürlich kann man die Userform auch farblich ansprechend gestalten, so dass sie sich von einer üblichen normalen MsgBox oder einer normalen Userform abhebt.

Ähnlich wie bei der selbstschließenden MsgBox ist der Aufruf in eine Funktion gekapselt, der man den anzuzeigenden Text, die Zeit für die Anzeige und optional einen Titel als Argumente übergeben kann.

Code im Modul der Userform:


Option Explicit

Public sngAnzeigezeit As Single

Private Sub UserForm_Activate()  
    Dim sngStart As Single
    Dim sngZiel As Single

    sngStart = Timer
    Do
        sngZiel = Timer
        DoEvents
    Loop Until sngZiel > sngStart + sngAnzeigezeit
    Unload Me
End Sub  

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)  
    Cancel = CloseMode <> vbFormCode
    'Um das Schließen-Kreuz zu deaktivieren  
End Sub  
            

Code in einem normalen Modul:


Function fktMeldungNichtWegklickbar(ByVal strAusgabe As String, _ 
                                 ByVal sngZeit As Single, _ 
                                 Optional ByVal varTitle As Variant)  
    Dim myForm As frmMeldung
    Dim strTitle As String

    If IsMissing(varTitle) Then
        strTitle = "Selbstschließende Meldung"
    Else
        strTitle = CStr(varTitle)
    End If

    Set myForm = New frmMeldung

    With myForm
        .sngAnzeigezeit = sngZeit
        .Caption = strTitle
        .lblAusgabe = strAusgabe
        .Show
    End With
    Set myForm = Nothing
End Function  

Meldung komfortabel aufrufen:


Sub TestDerFunktion()  
    Call fktMeldungNichtWegklickbar _
        (strAusgabe:="Diese Meldung schließt sich selbst, " & vbCrLf & _
        "ohne dass man sie wegklicken könnte.", _
        sngZeit:=3, _
        varTitle:=CVar("Test der selbstschließenden Funktion"))
End Sub  

Inspirierendes Beispiel für eine Userform in VBA

Gelegentlich benötigt man eine erweiterte InputBox, die nicht nur auf eine Eingabe wartet, sondern auch eine Auswahl anbietet. Auf der umfangreichen Site von Detlev Schubert VB-fun.de mit Foren hat Angie eine solche erweiterte InputBox für VBA vorgestellt.