OK here are the steps. You will have to create a seperate report to hold the Index. I'll call it "MyReport_Index"
1. Create a table to hold the index information, I'll call it tblIndex. It should have two fields. IndexLetter and PageNumber. You can make up your own names but these are what I will use. IndexLetter is datatype text and PageNumber is datatype Number, Long Integer or Integer. Set both of the Fields as the Primary key. To do that, you highlight both fields in the table and then click on the Primary Key button on the Toolbar.
2. Create a query using tblIndex, I'll call it qryIndex. Turn on the Totals, the Greek looking E button, and GroupBy IndexLetter and set PageNumber to Min.
3. Create a delete query that will delete the information from tblIndex, I'll call it qryDeletetblIndex. Post back if you have question about doing this.
4. In the Open Event for the Report add this code.
DoCmd.SetWarnings False
DoCmd.OpenQuery "qryDeletetblIndex"
DoCmd.SetWarnings True
5. In the Format Event for the Detail Section of the Report put this code. Substitues your textbox name for the textbox I have in
BOLD
Dim strSQL as String
strSQL = "Insert Into tblIndex(IndexLetter, PageNumber) Values ('" & Left(
LastNameField,1) & "', " & Page & "

"
DoCmd.SetWarnings False
DoCmd.RunSQL strSQL
DoCmd.SetWarnings True
6. In the PageFooter Print Event put this code. Again, adjust the names in
BOLD to your report names.
If Page = pages Then
If SysCmd(acSysCmdGetObjectState, acReport,
"MyReport_Index") Then
DoCmd.Close acReport,
"MyReport_Index"
End If
DoCmd.OpenReport
"MyReport_Index", acViewPreview
End If
7. "MyReport_Index" will use qryIndex as the Record Source.
8. To run the Index report, you have to open the main report and then move to the last page. This will fire the Print Event and run the Index report.
That should get you close.
Paul