We've had a similar problem here. What we did was to put a "locking" button on the database with all the data in it. Then we set up a lookup database, which was exactly the same as the main one, but had link tables. The main database would then export a simple, small table when the "locking" button was pressed. This locking table goes to the lookup database and is looked at on a timer every 10mins or so. If the tables says "lock" then the look up database triggers code that gives a warning the database will close in 5 mins and then after the 5mins is up the database closes by closing all open forms and then using sendkeys to close down. When they try to reload, if the "Lock" command is still on the table it trggers a msgbox to say try later. That way you can lock and unlock the database at your leisure and make the changes you want.
Sorry if this post is confusing, Im rushing now as Im off to a meeting.