GOT IT!
I used this guy's instructions and code:
http://www.blueclaw-db.com/report_dynamic_crosstab_field.htm
And made just a few tiny tweaks to it.
For future reference, I created a new report based on the crosstab query. I then deleted the column bind for each of the data fields on the report, so they showed as unbound. I also renamed them to "data_1", "data_2", etc. I then deleted the captions of the header labels (such as "Full Time", "Part Time", etc.) leaving them blank, and set their id's to "label_1", "label_2", etc. And I made sure there were 4, which was the maximum number of columns in my crosstab query. Beyond the first "office name" column, of course.
I then put this code in the VBA code behind:
Code:
Option Compare Database
Private Sub Report_Open(Cancel As Integer)
' If this code breaks on "DAO.Recordset" or "DAO.Database",
' hit the stop button above to stop debugging, select "Tools" on
' the menu right above it, select "References", and make sure that
' "Microsoft DAO X.Y Object Library" is checked, where X.Y is some version
' number that doesn't particularly matter.
' Code courtesy of http://www.blueclaw-db.com/report_dynamic_crosstab_field.htm
Dim rst As DAO.Recordset
Dim db As DAO.Database
Dim i As Integer
Dim j As Integer
Set db = CurrentDb
Set rst = db.OpenRecordset("select * from crosstab_try_no_zeros_1")
rst.MoveFirst
j = -1
i = 0
For i = 1 To rst.Fields.Count - 1
j = j + 1
Select Case j
Case 0
Me.data_1.ControlSource = rst.Fields(i).Name
Case 1
Me.data_2.ControlSource = rst.Fields(i).Name
Case 2
Me.data_3.ControlSource = rst.Fields(i).Name
Case 3
Me.data_4.ControlSource = rst.Fields(i).Name
End Select
skip_it:
Next i
rst.Close
Set rst = Nothing
End Sub
Private Sub ReportHeader_Format(Cancel As Integer, FormatCount As Integer)
' If this code breaks on "DAO.Recordset" or "DAO.Database",
' hit the stop button above to stop debugging, select "Tools" on
' the menu right above it, select "References", and make sure that
' "Microsoft DAO X.Y Object Library" is checked, where X.Y is some version
' number that doesn't particularly matter.
' Code courtesy of http://www.blueclaw-db.com/report_dynamic_crosstab_field.htm
Dim rst As DAO.Recordset
Dim db As DAO.Database
Dim i As Integer
Dim j As Integer
Set db = CurrentDb
Set rst = db.OpenRecordset("select * from crosstab_try_no_zeros_1")
rst.MoveFirst
j = -1
i = 0
For i = 1 To rst.Fields.Count - 1
If rst.Fields(i).Name = "office_name" Then GoTo skip_it
j = j + 1
Select Case j
Case 0
Me.label_1.Caption = rst.Fields(i).Name
Case 1
Me.label_2.Caption = rst.Fields(i).Name
Case 2
Me.label_3.Caption = rst.Fields(i).Name
Case 3
Me.label_4.Caption = rst.Fields(i).Name
End Select
skip_it:
Next
rst.Close
Set rst = Nothing
End Sub
Here's the report design:
Here it is when I run it against NY, Dallas, and LA:
And here's when it's run against just NY and Dallas:
Pain in the ass, but I'll take it. I can easily adapt that to my own needs now.