Loading
Excel.Tips.Net ExcelTips (Menu Interface)

Using a Progress Indicator in Macros

The macro language (VBA) provided with Excel is quite powerful. This means that you can do some pretty intense (and impressive) tasks with the language. Some tasks might take quite a while to complete. The problem is that some users may think their computer has hung unless there is some on-screen indication that the macro is running.

There are two ways that you can approach a solution to such a task. The first (and simplest) option is to use the status bar to indicate the progress of your macro. For instance, you could add some code to your macro by which it determines the percentage of completion. Once you have a percentage in hand (let's say it is stored in the xPctComp variable), you simply add the following line to your macro:

Application.StatusBar = "Portion completed: " & _
  Format(xPctComp, "##0.00%")

Such a line could be added within the main body of your macro, for instance within whatever loop you have that controls processing. When the macro is just about done, you should add a line that clears the status bar, such as the following:

Application.StatusBar = ""

The other way to create a progress indicator is to use some sort of a dialog box that displays a "fuel gauge" indicator as to the percentage complete. There are numerous implementations of such a concept already available on the Web. A good representative of this approach is found at John Walkenbach's site:

http://www.j-walk.com/ss/excel/tips/tip34.htm

ExcelTips is your source for cost-effective Microsoft Excel training. This tip (2496) applies to Microsoft Excel 97, 2000, 2002, and 2003.

Related Tips:

Program Successfully in Excel! John Walkenbach's name is synonymous with excellence in deciphering complex technical topics. With this comprehensive guide, "Mr. Spreadsheet" shows how to maximize your Excel experience using professional spreadsheet application development tips from his own personal bookshelf. Check out Excel 2013 Power Programming with VBA today!

 

Leave your own comment:

*Name:
Email:
  Notify me about new comments ONLY FOR THIS TIP
Notify me about new comments ANYWHERE ON THIS SITE
Hide my email address
*Text:
*What is 5+3 (To prevent automated submissions and spam.)
 
 
           Commenting Terms

Comments for this tip:

John Zelno    23 Oct 2012, 13:24
When implementing a progress indicator, be careful of how frequently the indicator is updated. Updating it too frequently can make a macro run much longer. Updating the screen with anything takes a lot of time. You should instrument the progress indicator with something to limit the update frequency. This can be a conditional (IF statement) that updates the conditional every 100 or 1000 loops, or every 5% of a task.

To prove this, I ran the following macro:

Sub test()
  t1 = Timer
  For i = 1 To 100000#
    Application.StatusBar = "loop iteration: " & i
  Next
  t2 = Timer
  For j = 1 To 100000#
    If (j Mod 100) = 0 Then
      Application.StatusBar = "loop iteration: " & j
    End If
  Next
  t3 = Timer
  For k = 1 To 1000000#
  Next
  t4 = Timer
  MsgBox t2 - t1 & {carriage return} & t3 - t2 & {carriage return} & t4 - t3
End Sub

Running this, it takes 28.5 seconds for the macro to count to 100K, updating every loop, 0.3 seconds for it to count to 100K, updating every 100 loops, and 0.02 seconds to count to 1M without a status update.
 
 

Our Company

Sharon Parq Associates, Inc.

About Tips.Net

Contact Us

 

Advertise with Us

Our Privacy Policy

Our Sites

Tips.Net

Beauty and Style

Cars

Cleaning

Cooking

DriveTips (Google Drive)

ExcelTips (Excel 97–2003)

ExcelTips (Excel 2007–2016)

Gardening

Health

Home Improvement

Money and Finances

Organizing

Pests and Bugs

Pets and Animals

WindowsTips (Microsoft Windows)

WordTips (Word 97–2003)

WordTips (Word 2007–2016)

Our Products

Helpful E-books

Newsletter Archives

 

Excel Products

Word Products

Our Authors

Author Index

Write for Tips.Net

Copyright © 2016 Sharon Parq Associates, Inc.