Thanks again for getting back to me. i've been trying your ideas and thinking about other solutions i've found. They seem to be based around controls in the group header, which doesn't really fit my situation. I'd really like to be able to use "If txtTextBox.page = me.page then..." but of course that property doesn't exist. I started using labels or the .tag property because i could check if it was blank and then set it equal to the current page so that i could avoid the page number changing. if i put a text box on, say, page 3 with controlsource "=[Page]" it will show correctly on that page. but if i make a textbox with controlsource "=txtTextBox" on any other page (first or last) it will use the current page instead of the page the textbox is on. i could force the format or print to run twice by using "If me.page = me.pages..." or something similar. Either way, I haven't been able to actually implement this.
Another idea I tried was to loop through all the controls and see if a control was between two page breaks and just use my own counter. the problem here is that the report controls are organized by first to last added instead of top to bottom.
So then it gets more complicated. I looked at microsoft's solution:
ACC2000: How to Create a Table of Contents but that doesn't seem to apply.
Same with the array-based method:
Reports: Printing First and Last Page for a Group .
My need for this is far lower less than the effort I've put into this, but I thought I'd post a few ideas to see if someone with more experience could make it work or find a better way. It seems like many people would like to have a TOC with dynamic page numbering.
Anyways, thanks for any ideas you may have.