hayesbcajh has some very good ideas presented, but I would like to clear up a couple of items. First, when creating a CrossTab query, you can use the property "Column Headings" within the query properties to specifiy "Place1", "Place2", "Place3", etc. For as many "PlaceX"s you feel you will ever need or want to display on the report. That saves you from having to recreate the report each time.
If you have a number of places that you know you'll never exceed then you can load dummy records into your table for those places so when you create the report for the first time you will have placeholders for all the Place fields. you will not be able to delete those dummy records because the report will complain that you are referencing a field that doesn't exist.
You don't need the dummy records, the Column Headings property will take care of that for you. These dummy records were to have the CrossTab query think it had all the "PlaceX"s in the table, that way the report would not complain about missing fields. The Column Headings property takes care of that.
Now, if you need to create a crosstab query in VBA code, you can first create one very close to what you need to create in VBA code then copy that SQL to a VBA module so you can copy it into your VBA code. I have written a utility in Access that will do the conversion from SQL to VBA code that will create the SQL code that was presented to the utility. Go to my website (link is in my signature area), then click on Access Tips in the menu area (top of page), then at the bottom of the Access Tips page will be a link to download the SQL to VBA Utility. It is written in Access 2000 so it will work in any version from 2000 and up.
Hope this helps,
PS: To get to the query properties, when the query is open in design view, right click on the area where the tables/queries are shown (top part of the grid) and select Properties.