RE: Timed and blinking messages

Tech Tip: Click here to run a free scan for Windows Errors and optimize PC performance



Mats,

Something along these lines .....

Variable "End_Pause" is set when Userform is initialised and changed when
Userform is clicked. Until the change, the Warning macro will loop endlessly.

And you cannot call a Userform module from a general module.


Public End_Pause As Boolean

Private Sub UserForm_Click()
End_Pause = True
End Sub
Sub Other_TriggerSub()
Arate = 10
BRate = 20
If Arate <> BRate Then
Call Warning("LabelRateWarn1", 0.15)
End If
End Sub

Sub Warning(ByVal Mess As String, ByVal AddTime As Double)
Dim y As Single, x As Single, z As Single
Dim Start, Delay
Do
For y = 1 To 5
Start = Timer
Delay = Start + AddTime
Do While Timer < Delay
Me.Controls(Mess).Visible = True
DoEvents
Loop
Next y
For z = 1 To 5
Start = Timer
Delay = Start + AddTime
Do While Timer < Delay
Me.Controls(Mess).Visible = False
DoEvents
Loop
Next z
Loop Until End_Pause
End_Pause = False
Me.Controls(Mess).Visible = False
End Sub

Private Sub UserForm_Initialize()
End_Pause = True
End Sub


"Mats Samson" wrote:

Thanks Toppers,
it works great!
Can you also solve the last problem, looping the procedure endlessly if the
computer is idle, i.e. until the user do a OnClick or Click event.

Furthermore I'd like to know if I can run/start a procedure located in a
userform
from a module? It would be convenient if the form is in Hide state while I'm
doing other things when I run Userform.Show vbmodeless, I'd like to run the
below Warning procedure.

"Toppers" wrote:

Hi,
Example of passing parameters:

Sub Other_TriggerSub()
Arate = 10
Brate = 20
If Arate <> BRate Then
Call Warning("LabelRateWarn1", 0.15)
End If
End Sub

Sub Warning(ByVal Mess As String, ByVal AddTime As Double)
Dim y As Single, x As Single, z As Single
Dim Start, Delay
For x = 1 To 10
For y = 1 To 5
Start = Timer
Delay = Start + AddTime
Do While Timer < Delay
Me.Controls(Mess).Visible = True
DoEvents
Loop
Next y
For z = 1 To 5
Start = Timer
Delay = Start + AddTime
Do While Timer < Delay
Me.Controls(Mess).Visible = False
DoEvents
Loop
Next z
Next x
Me.Controls(Mess).Visible = False
End Sub


HTH

"Mats Samson" wrote:

I found recently a great solution to timed messages at The Xcel Files site,
http://www.xcelfiles.com by Ivan F Moala (Thanks Ivan!). I’ve seen many asked
for it but no good solution has been provided. The example code was about
animated GIF’s but with only a slight modification I changed it to use
whatever objects I like in my Forms. The most obvious usage would be to
display a self-closing message in the form when a certain condition is met,
maybe a warning. Warning messages in the status bar is not very alerting,
they have to appear where the user has his focus! I’ve used labels and they
can stay invisible until they’re needed and you can even set their attributes
to alert the user even more.
Here is a blinking message that automatically disappears after some time:
UserForm_Initialize()
LabelRateWarn1.Visible = False
End Sub

Other TriggerSub ()
......
If ARate <> BRate Then
Warning
End If
End Sub

Sub Warning()
Dim y As Single, x As Single, z As Single
Dim Start, Delay
For x = 1 To 10
For y = 1 To 5
Start = Timer
Delay = Start + 0.15
Do While Timer < Delay
LabelRateWarn1.Visible = True
DoEvents
Loop
Next y
For z = 1 To 5
Start = Timer
Delay = Start + 0.15
Do While Timer < Delay
LabelRateWarn1.Visible = False
DoEvents
Loop
Next z
Next x
LabelRateWarn1.Visible = False
End Sub
If you don’t want the blinking, remove the loop Z.

Now to my problem!
I’m very fond of reusing code and I have several situations in various
locations of my multipage form where I’d like to display a message to the
user.
How do I declare a LabelName as a variable and transfer the variable between
procedures?
From TriggerSub_1 I would put the variable Mess = LabelRateWarn1
and go to Warning (Mess)
From TriggerSub_2 I would put the variable Mess = LabelPriceWarn2
and go to the same Warning (Mess)
where I have the actions Mess.Visible = True/False.
It could be even more sophisticated if I could send x, y, and z variables
from the Trigger-subs as well. Then I could set speed and length of the
blinking message.

Furthermore I’d like to have a message displayed until a click event! Say
that a
message is displayed at a menu. If the menu is idle, it’ll continue to be
displayed until the user clicks a either a specified button or the eventually
the form itself (non-idle state).

Can anybody help me with these?

.


Quantcast