Animating a Label


The final example in this chapter demonstrates how to animate a Label control. The UserForm shown in Figure 14-21 is an interactive random number generator.

image from book
Figure 14-21: Generating a random number.

Two TextBox controls hold the lower and upper values for the random number. A Label control initially displays four question marks, but the text is animated to show random numbers when the user clicks the Start button. The Start button changes to a Stop button, and clicking it again stops the animation and displays the random number. Figure 14-22 shows the dialog box displaying a random number between 1 and 10,000.

image from book
Figure 14-22: A random number has been chosen .

The code that's attached to the button is as follows :

 Dim Stopped As Boolean Private Sub StartStopButton_Click()     Dim Low As Double, Hi As Double     If StartStopButton.Caption = "Start" Then '       validate low and hi values         If Not IsNumeric(TextBox1.Text) Then             MsgBox "Non-numeric starting value.", vbInformation             With TextBox1                 .SelStart = 0                 .SelLength = Len(.Text)                 .SetFocus             End With             Exit Sub         End If         If Not IsNumeric(TextBox2.Text) Then              MsgBox "Non-numeric ending value.", vbInformation             With TextBox2                 .SelStart = 0                 .SelLength = Len(.Text)                 .SetFocus             End With             Exit Sub         End If '       Make sure they aren't in the wrong order         Low = Application.Min(Val(TextBox1.Text), Val(TextBox2.Text))         Hi = Application.Max(Val(TextBox1.Text), Val(TextBox2.Text)) '       Adjust font size, if necessary         Select Case Application.Max(Len(TextBox1.Text), Len(TextBox2.Text))             Case Is < 5: Label1.Font.Size = 72             Case 5: Label1.Font.Size = 60             Case 6: Label1.Font.Size = 48             Case Else: Label1.Font.Size = 36         End Select         StartStopButton.Caption = "Stop"         Stopped = False         Randomize         Do Until Stopped             Label1.Caption = Int((Hi - Low + 1) * Rnd + Low)             DoEvents ' Causes the animation         Loop      Else         Stopped = True         StartStopButton.Caption = "Start"      End If End Sub 

Because the button serves two purposes (starting and stopping), the procedure uses a public variable, Stopped , to keep track of the state. The first part of the procedure consists of two If-Then structures to validate the contents of the TextBox controls. Two more statements ensure that the low value is in fact less than the high value. The next section adjusts the Label control's font size, based on the maximum value. The Do Until loop is responsible for generating and displaying the random numbers. Notice the DoEvents statement. This statement causes Excel to "yield" to the operating system. Without the statement, the Label control would not display each random number as it is generated. In other words, the DoEvents statement is what makes the animation possible.

The UserForm also contains a CommandButton that serves as a Cancel button. This control is positioned off the UserForm so it's not visible. This CommandButton has its Cancel property set to True , so pressing Esc is equivalent to clicking the button. It's click event handler procedure simply sets the Stopped variable to True and unloads the UserForm:

 Private Sub CancelButton_Click()     Stopped = True     Unload Me End Sub 
CD-ROM  

This example, named image from book  random number generator.xlsm , is available on the companion CD-ROM.




Excel 2007 Power Programming with VBA
Excel 2007 Power Programming with VBA (Mr. Spreadsheets Bookshelf)
ISBN: 0470044012
EAN: 2147483647
Year: 2007
Pages: 319

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net