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.