I think the only clear rule you'll find, is that you must use [] when you have spaces or special charachters in names of your objects, and that when referencing form controls in queries (well, and in controlsources when referencing in main/sub form setups), you need the bang (!) notation.
When referring to properties and methods, dot must be used, for instance the recordsetclone property of a form:
[tt]me.recordsetclone[/tt]
The usual way to describe this can be for instance: "In general, you follow the bang with the name of something you created: a form, report or control. The bang also indicates that the item to follow is an element of a collection. You'll usually follow the dot with a property, collection, or method name." (Getz et all, adh 2000)
Else there are lot of threads here, info on the net on the multitude of preferences. Let's take referring to a text control on a form. Access in most versions will allow something like this (txtTst)
[tt]txtTst, txtTst.value, me.txtTst, me.txtTst.value, me!txtTst, me!txtTst.value, me.controls!txtTst, me.controls!txtTst.value, me("txtTst"), me("txtTst").value, me.controls("txtTst"), me.controls("txtTst").value, etc...[/tt]
It's mostly about preferences. Using the dot (.), is preferred by many vs bangs (!), cause it's a bit more convenient when coding (the intellisence dropdown).
Here's the link used by those claiming dots (.) is THE RIGHT WAY;-)
Cleaner Coding: Bang vs. Dot
Hovewer, two things to consider
* sometimes, very, very rare, though, you might get into trouble using the me.txtTst notation (dot (.)), cause Access get's confused about what it refers to.
* what kin of reference is Microsoft using in their documentation (help files...)
All that said, my preference is either me("txtTst").value or me.controls("txtTst").value...
Roy-Vidar