I am reading this question differently. You are not asking about a calendar control. You want a form that looks like this
Time Period Room 1 Room 2 Room3 Room N
0600-0700 Mark J. Available Cindy
0700-0800 Avaliable Brian M. Cathy
....
....
....
I hate to answer this one because there are probably a ton of availble (maybe freeware) that does this with all kinds of bells and whistles. Also this is ripe for mission creep.
If you wanted a real simple one this is how I would do it.
Make a time period table that has 24 (1 hour) periods. My scale is 1 hour increments so I add 24 records, you could do 1/2 or 15 min periods. But this is nothing but a list of periods.
tblTimePeriods
autoPeriodID
dtmStartTime
dtmEndTime
strPeriod
Make a room table
tblRoom
autoRoomID
strRoomName
Now make a join table for reserving a room
tbl_Room_Period
intRoomID
intPeriodID
strPersonRequestingRoom (probably another foriegn key)
other details about the meeting
index this table so that the composite index of RoomID and Period ID are unique.
Now to keep this real simple, a person can sign up for 1 or more time periods. The trick would be to design your interface so that you populate this join table with a RoomID and PeriodID.
Now to show this in the above Format. First make a cartesian product between tblTimePeriods and tblRooms
qryRoomPeriods
SELECT tblRooms.strRoom, tblTimePeriods.dtmStartTime, tblTimePeriods.dtmEndTime, tblTimePeriods.autoTimePeriodID, tblRooms.autoRoomID
FROM tblRooms, tblTimePeriods
ORDER BY tblRooms.strRoom;
This gives you a query that has record for every room and every time period.
Now join qryRoomPeriods to the joinTblRoom_Period using a left outer join.
This produces a query that has every room and every time period, and the details for reserved rooms where the room ID, and time period ID match. Something like
Room 1 12:00:00 AM 6:00:00 AM John
Room 2 12:00:00 AM 6:00:00 AM
Room 3 12:00:00 AM 6:00:00 AM
Room 1 6:00:00 AM 12:00:00 PM Mark
Room 2 6:00:00 AM 12:00:00 PM
Room 3 6:00:00 AM 12:00:00 PM
Room 1 12:00:00 PM 6:00:00 PM
Room 2 12:00:00 PM 6:00:00 PM John
Room 3 12:00:00 PM 6:00:00 PM
Room 1 6:00:00 PM 12:00:00 AM
Room 2 6:00:00 PM 12:00:00 AM
Room 3 6:00:00 PM 12:00:00 AM
qryTimePeriods
SELECT qryRoomPeriods.strRoom, qryRoomPeriods.dtmStartTime, qryRoomPeriods.dtmEndTime, joinTblPersonRoom.strName
FROM qryRoomPeriods LEFT JOIN joinTblPersonRoom ON (qryRoomPeriods.autoRoomID = joinTblPersonRoom.roomID) AND (qryRoomPeriods.autoTimePeriodID = joinTblPersonRoom.periodID);
Now do a cross tab on the above.
StartTime Room 1 Room 2 Room 3
0:00 John
6:00 Mark
12:00 John
18:00
TRANSFORM First(qryTimeSlots.strName) AS [The Value]
SELECT qryTimeSlots.dtmStartTime
FROM qryTimeSlots
GROUP BY qryTimeSlots.dtmStartTime
PIVOT qryTimeSlots.strRoom;
I put StartTime on the left, but you would probably want a string representing the period (0500-0600), etc. Do this in the periods table.
Turn this into a form and you have a solution.
This would work,although rudimentary, but I would search the web for something like this. I am sure there is something out there that would work well.