1. To close a form after X cycles, make the timer code decrement a variable that is in the form's class module declaration area. Such variables are available for as long as that form is open. Set it to some number on form_open (or form_load) and then count it down in the timer. When the counter hits zero, do a DoCmd.Close of the form.
2. A type of home-grown progress bar that I use sometimes is to build two overlapping rectangles. To start the bar, be sure that both rectangles have the same TOP and LEFT values. Make the "bottom" bar have a background color and a border color. Make the top bar (bottom/top as in: move to top, move to bottom) have a different color, no border, same HEIGHT as the bottom bar, and WIDTH = 1. Then in the timer, increment the width until it reaches the width of the bottom bar. This gives me much finer grain over the Access standard progress bar that I almost never use the standard one.
It is also possible to interpolate in the case where you know how many times you will do something. Let's say you know you have M records to process and you can count the number of records processed so far (in N). Then the width of the top bar is just
topbar.width = N * bottombar.width / M
where N and M are of type LONG. The bigger the width of the bottom bar, the finer the grain of the progress bar, since it is usually in units of twips (=24/inch).
If you REALLY want to get sexy, limit the width of the top bar and when it reaches that width, start moving the LEFT property of the bar. Then a little bar slides across the bottom bar. When you reach the point where LEFT+WIDTH of the top bar equals WIDTH of the bottom bar, you could choose to increment LEFT and decrement WIDTH of the top bar until it reaches width 0, in which case you could reset everything and start over again in the cycle. Simple to program, sexy as hell to the uninitiated, and doesn't involve use of "foreign" or ActiveX progress indicators from the extended toolbars.