there is more to 1 then that.
Bang provides late bound access to the default member of the object that precedes it by passing the name value of what follows it. If we use Me as an example, the default member of Me is the controls collection, thus Me!txtDept will work IF txtDept is a control on the form referenced by Me. Me.txtDept is an explicit reference to the parent object and its child member and is not late bound. Therefore, if we misspell the control name txtbox, Me.tttextbox will be caught when you compile the code or attempt to run it. Me!tttextbox will not raise an error until there is an attempt to execute that line of code. I NEVER use Me!
That is not a complete treatise on the subject; e.g. I have not thought about why ! is the correct (only?) method when it comes to certain recordset references such as when referring to a recordset field by name. That does not include referencing the recordset field via the Fields collection.
Regarding 3, it should then be apparent by the forgoing that I would not use [Forms]![SampleForm]![Combobox] either.
It would be [Forms]![SampleForm].[Combobox]
So why not [Forms].[SampleForm].[Combobox]? I don't know. It is just one of those things that you (I) learn is the correct syntax. Perhaps a form by name is not the default member of Forms collection - I never bothered to figure that one out either.
Last edited by Micron; 07-05-2019 at 04:09 PM.
Reason: clarification
The more we hear silence, the more we begin to think about our value in this universe.
Paraphrase of Professor Brian Cox.