if I were you, I won't put so much effort into such once a year thing. I would just modify it every year, better than thinking hard to get lot of code - easy to cause problem - to perform the changes.
If you still want to do it, following may help:
1 Name the textboxes in the report in order: tb1, tb2, tb3...
2 Name the label accordingly to: label1, label2, label3...
3 In the open event of the report, make up the record source statement
4 In the detail format event of the report, change the caption of each label.
Sample code as following:
Code:
Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer)
' modify captions
'QryFlex is the cross tab query name
Dim rs As dao.Recordset
Dim col As Long
Set rs = CurrentDb.OpenRecordset("select * from QryFlex where false")
For col = 0 To rs.Fields.Count - 1
Me.Controls("Label" & col).Caption = rs.Fields(col).Name
Next
Set rs = Nothing
End Sub
Private Sub Report_Open(Cancel As Integer)
'change record source
Dim rs As dao.Recordset
Dim col As Long
Dim source As String
Set rs = CurrentDb.OpenRecordset("select * from QryFlex where false")
source = "select "
For col = 0 To rs.Fields.Count - 1
source = source & "[" & rs.Fields(col).Name & "] as tb" & col & ","
Next
Set rs = Nothing
source = Left(source, Len(source) - 1) & " from qryflex"
Me.RecordSource = source
End Sub