Hi Jim,
For your first question here is an excellent past post by MVP Dirk "Yoda" Goldgar on this subject:
The bang (!) notation specifically denotes that what follows is a
member of a collection. In the case of a form, it would denote a
member of the form object's default collection, the Controls
collection; in the case of a recordset, a member of the recordset's
Fields collection. The dot (.) notation denotes that what follows is
a property or method of the preceding object. So you can refer to
(form object).RecordSource, but not (form object)!RecordSource.
Most often when your question comes up, it has to do with which
operator to use in referring to the controls or properties of a Form
object. Logically, the bang notation would be "proper" to use in
referring to controls on a form, and the dot notation proper only for
referring to properties of the form.
But wait. Wherever possible, Access makes the controls on a form and
the fields in its recordsource all available as properties of the
form. It also makes the fields of the recordsource available via the
bang notation. I'm not sure exactly how it does this; maybe if a
name is not found in the Controls collection it checks the Fields
collection of the form's recordset as a fallback position. So for
most practical purposes Me!ControlName and Me.ControlName evaluate to
the same thing, and the timing tests I've seen suggest that there is
little to choose between them as far as execution efficiency is
concerned. I seem to recall that there is a very slight difference,
but I can't remember which way the advantage lies, and it's not much.
There's a coding-time advantage, however, to using the dot notation,
as it makes the "intellisense" dropdown lists available. That's a
strong argument for using the dot notation, in my book.
But wait again! I said above that Access makes the controls available
as properties "wherever possible". There are cases where it can't do
that. Specifically, it can't do it when there is already a property
of the same name as the control in question. For example, if your
form "Form1" has a control or a field foolishly named "Name",
currently displaying the value "John Doe", then executing this
statement in the form's code module:
Debug.Print Me!Name, Me.Name
will print
John Doe Form1
in the Immediate Window. So you must be careful not to use any
reserved words or built-in properties as names for your controls, if
you want to use the dot notation to refer to them. But then, you
should avoid doing that anyway, as it tends in general to confuse poor
Access.
[/QUOTE][/QUOTE][/QUOTE]
For your second question see this link for help:
http://www.mvps.org/access/forms/frm0031.htm