Microsoft KB Archive/174026

= ODE: How to Use the ProgressBar ActiveX Control =

Article ID: 174026

Article Last Modified on 9/26/2003

-

APPLIES TO


 * Microsoft Office 97 Developer Edition

-



This article was previously published under Q174026



Advanced: Requires expert coding, interoperability, and multiuser skills.



SUMMARY
You can use a ProgressBar control to show an operation's progress toward completion. A ProgressBar control has a range and a current position. This article demonstrates how you can use the Max, Min, and Value properties of the ProgressBar Control within a Microsoft Access 97 Database.

This article assumes that you are familiar with Visual Basic for Applications and with creating Microsoft Access applications using the programming tools provided with Microsoft Access. For more information about Visual Basic for Applications, please refer to the "Building Applications with Microsoft Access 97" manual.



MORE INFORMATION
 Start Microsoft Access 97 and open any database. In the Database window, click the Forms tab, and then click New to create a new form not based on any table or query. On the File menu, click Save As/Export, and save the form as frmProgressBar.  Add three unbound text boxes to the frmProgressBar form, and set their properties as follows:       Name: txtMin Default Value: 10 Validation Rule: Is Not Null Validation Text: Please Enter a Numerical Value

Name: txtMax Default Value: 5000 Validation Rule: Is Not Null Validation Text: Please Enter a Numerical Value

Name: txtStep Default Value: 10 Validation Rule: Is Not Null Validation Text: Please Enter a Numerical Value   On the Insert menu, click ActiveX Control and insert the Microsoft ProgressBar Control, version 5.0. Set its properties as follows:       Name: CtlProgress Width: 1.95 Height: .15 </li>  Add two command buttons, and set their properties as follows: <pre class="fixed_text">      Name: cmdRun Caption: Run

Name: cmdClear Caption: Clear </li>  Insert a label, and set its properties as follows: <pre class="fixed_text">      Name: lblComplete Caption: 0% Complete Visible: No                   </li> Using the right mouse button (right-click), click the Run command button, and then click Build Event on the menu that appears.</li> In the Choose Builder dialog box, click Code Builder, and then click OK.</li>  Type the following event procedure in the Module window: Private Sub cmdRun_Click

Dim prg As ProgressBar Dim IntValue As Long Dim fmin As TextBox, fmax As TextBox, fstep As TextBox Dim strComplete As String Dim Complete As Label

Set fmin = Forms!frmProgressBar!txtMin Set fmax = Forms!frmProgressBar!txtMax Set fstep = Forms!frmProgressBar!txtStep Set prg = Me!CtlProgress.Object Set Complete = Me!lblComplete

' If the txtMin textbox contains a non-numeric value ' or a number less than 0, force the user to     ' re-enter data in correct format.

If Val(fmin) <= 0 Then MsgBox "Please enter a positive numerical value above 0 " & _ "in the Minimum text box." fmin = Null fmin.SetFocus Exit Sub End If

' If the txtMax text box contains a non-numeric ' value or a number less than the value in txtMin, ' force the user to re-enter data in correct format.

If Val(fmax) <= 0 Or Val(fmax) <= fmin Then MsgBox "Please enter a positive numerical value above " & _ fmin & " in the Maximum textbox." fmax = Null fmax.SetFocus Exit Sub End If

' If txtStep contains a non-numeric value or a number less ' than 1, force the user to re-enter data in correct format.

If Val(fstep) < 1 Then MsgBox "Please enter a number less than or equal " & _ "to 1 in the Step text box." fstep = Null fstep.SetFocus Exit Sub End If

' The maximum value for the MAX property of a progress bar ' is 10,000; if the number entered in txtMax is over 10,000, ' set the MAX property to 10,000. Otherwise, set the MAX ' property to whatever the user has entered.

If fmax > 10000 Then prg.Max = 10000 Else prg.Max = fmax End If

' The maximum value for the MIN property of a progress bar ' is also 10,000; if the number entered in txtMin is     ' greater than 10,000, set the MIN property to 9,999 ' so it is still less than the MAX property. Otherwise, ' set the MIN property to whatever the user has entered.

If fmin > 10000 Then prg.Min = 9999 Else prg.Min = fmin End If

IntValue = fmin

' Increment the progress bar and % complete label as long as the ' Value assigned to it is less than or equal to the MAX property ' of the progress bar.

Complete.Visible = True

Do        IntValue = IntValue + Me!txtStep If IntValue >= prg.Max Then IntValue = prg.Max End If        prg.Value = IntValue strComplete = Format((prg.Value / prg.Max) * 100, "##") & _ " % Complete" Complete.Caption = strComplete DoCmd.RepaintObject Loop While IntValue < prg.Max

End Sub </li> Using the right mouse button (right-click), click the Clear command button, and then click Build Event on the menu that appears.</li> In the Choose Builder dialog box, click Code Builder, and then click OK.</li>  Type the following event procedure in the module window: Private Sub cmdClear_Click

Dim prg As ProgressBar Dim Complete As Label

Set prg = Me!CtlProgress.Object Set Complete = Me!lblComplete

' Clear the Progress Bar by setting its value to the ' Control's MIN property; then hide the Complete label.

prg.Value = prg.Min Complete.Visible = False

End Sub </li> On the Debug menu, click Compile Loaded Modules.</li> Save the form, and then switch to Form View.</li> Click Run.

Note that the ProgressBar fills while the label control shows the progress as a percentage.</li></ol>

<div class="references_section">