In realtà la regola dell'uso di [.] rispetto a [!] è molto chiara ed un pochetto più tecnica…
[.] Si riferisce a Proprietà, Metodi e/o Eventi di un Oggetto, ed attiva l'intellisense
Me.Name (property)
Me.Caption (property)
DoCmd.RunCommand (method)
CurrentDb.OpenRecordSet (method)
Me.OnActivate (event)
[!] Si riferisce ai Membri di una Collection, la Form/Report sono membri della Collection Forms/Reports, i Controlli sono membri della Collection Controls, i Campi(Field) sono membri della Collection Fields ecc…!
Me!TextBoxNome
Forms!NomeForm!NomeControllo
rs!Nome
Quindi il [!] indica che la parte dopo è membri della parte che precede.
Alternativa
Me.Controls("TextBoxNome")
Forms("NomeForm)".Controls("NomeControllo").Properties("Name")
rs.Fields("Nome")
Solitamente funzionano entrambi perchè Access controlla sempre l'appartenenza a Properties o Collection, ma ci sono delle eccezioni che Access non gestisce, ad esempio in caso di presenza di Spazi nel Nome, in questi casi solo usando [!] funiona, mentre se il Nome dell'oggetto è tra le parole riservate, ovviamente non funziona…!
Esempio se chiamiamo un Controllo TextBox [Name] e scriviamo
Me!Name
Avremo molti problemi… [Name] è una parola riservata e solo con il [.] funziona senza problemi ma, farà riferimento alla Property Name non al Controllo [Name] che non si può usare…