Using For...Next Loops

   

Using For...Next Loops

The most common type of loop is the For...Next loop. Use this loop when you know exactly how many times you want to repeat a group of statements. The structure of a For...Next loop looks like this:

 For  counter  =  start  To  end  [Step  increment  ]     [  statements  ] Next [  counter  ] 

counter

A numeric variable used as a loop counter . The loop counter is a number that counts how many times the procedure has gone through the loop.

start

The initial value of counter . This is usually 1, but you can enter any value.

end

The final value of counter .

increment

This optional value defines an increment for the loop counter. If you leave this out, the default value is 1. Use a negative value to decrement counter .

statements

The statements to execute each time through the loop.

The basic idea is simple. When VBA encounters the For...Next statement, it follows this five-step process:

  1. Set counter equal to start .

  2. Test counter . If it's greater than end , exit the loop (that is, process the first statement after the Next statement). Otherwise, continue. If increment is negative, VBA checks to see whether counter is less than end .

  3. Execute each statement between the For and Next statements.

  4. Add increment to counter . Add 1 to counter if increment isn't specified.

  5. Repeat steps 2 through 4 until done.

Listing 6.12 shows a simple Sub procedure LoopTest that uses a For...Next statement. Each time through the loop, the procedure uses the Application object's StatusBar property to display the value of counter (the loop counter) in the status bar. (See Chapter 12, "Interacting with the User," to learn more about the StatusBar property.) When you run this procedure, counter gets incremented by 1 each time through the loop, and the new value gets displayed in the status bar.

Listing 6.12. A Simple For...Next Loop
 Sub LoopTest()     Dim counter     For counter = 1 To 10         '         'Display the message         '         Application.StatusBar = "Counter value: " & counter         '         ' Wait for 1 second         '         Application.Wait Now + TimeValue("00:00:01")     Next counter     Application.StatusBar = False End Sub 

Here are some notes on For...Next loops:

  • If you use a positive number for increment (or if you omit increment ), end must be greater than or equal to start . If you use a negative number for increment , end must be less than or equal to start .

  • If start equals end , the loop will execute once.

  • As with If...Then...Else structures, indent the statements inside a For...Next loop for increased readability.

  • To keep the number of variables defined in a procedure to a minimum, always try to use the same name for all your For...Next loop counters. The letters i through n traditionally are used for counters in programming. For greater clarity, you might want to use names such as "counter."

  • For the fastest loops, don't use the counter name after the Next statement. If you'd like to keep the counter name for clarity (which I recommend), precede the name with an apostrophe (') to comment out the name, like this:

     For counter = 1 To 10     [  statements  ] Next 'counter 
  • If you need to break out of a For...Next loop before the defined number of repetitions is completed, use the Exit For statement, described in the section "Using Exit For or Exit Do to Exit a Loop."

graphics/note_icon.gif

The LoopTest procedure works fine in Excel, but it will fail in the other Office applications because they don't implement the Wait method. If you need to get your code to delay for a short while, here's a simple procedure that does the trick:

 Sub VBAWait(delay As Integer)     Dim startTime As Long     startTime = Timer     Do While Timer - startTime < delay         DoEvents     Loop End Sub 

Note the use of the DoEvents function inside the Do While...Loop structure. This function yields execution to the operating system so that events such as keystrokes and application messages are processed while the procedure delays.




Absolute Beginner's Guide to VBA
Absolute Beginners Guide to VBA
ISBN: 0789730766
EAN: 2147483647
Year: 2003
Pages: 146

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