Hi Mike,
out of microsoft's VBA Language Specification Documentation (Release:
April 30, 2014):
...
A /dictionary access expression/ is an alternate way to invoke an
object’s default member with a *String* parameter.
dictionary-access-expression = l-expression NO-WS "!" NO-WS
unrestricted-name
dictionary-access-expression =/ l-expression LINE-CONTINUATION "!" NO-WS
unrestricted-name
dictionary-access-expression =/ l-expression LINE-CONTINUATION "!"
LINE-CONTINUATION unrestricted-name
/Static semantics/. A dictionary access expression is invalid if the
declared type of <l-expression> is a type other than a specific class,
Object or Variant.
A dictionary access expression is syntactically translated into an index
expression with the same expression for <l-expression> and an argument
list with a single positional argument with a declared type of String
and a value equal to the name value of <unrestricted-name>.
...
Perhaps this may help.
Btw.:
All fields of a form's datasource are also accessible through the
controls collection, but they are not visible. It is not well
documented. So you can either use me!<fieldname> or
me.controls(<fieldname>). The datasource field is threaded as a hidden
control. This is very useful and needed if you want to manipulate the
cached field values of the form's datasource.
Because of this it is always a good idea to add a prefix to the control
names to clearly distinguish between controls and fields.
Ulrich