Me is a short cut. It allows you to refer to controls without refering to the long name of the object that they are on.
e.g. in the code 'behind' a form you can use syntax like me.MyControl, instead of Forms!myform.MyControl
! has a variety of object over and above just talking loudly. Here is some Access help info
The ! operator
The ! operator indicates that what follows is a user-defined item (an element of a collection). For example, use the ! operator to refer to an open form, an open report, or a control on an open form or report.
Identifier Refers to
Forms![Orders] The open Orders form.
Reports![Invoice] The open Invoice report.
Forms![Orders]![OrderID] The OrderID control on the open Orders form.
The . (dot) operator
The . (dot) operator usually indicates that what follows is an item defined by Microsoft Access. For example, use the . (dot) operator to refer to a property of a form, report, or control. You can also use the . (dot) operator to refer to a field value in an SQL statement, a Microsoft Visual Basic for Applications method, or a collection. Identifier Refers to
Reports![Invoice]![ShipName].Visible The Visible property of the ShipName control on the Invoice report.
SELECT Employees.EmployeeID, Orders.OrderID
FROM Employees INNER JOIN Orders ON Employees.EmployeeID = Orders.EmployeeID; The EmployeeID field from the Employees table and the Orders table.
DoCmd.Close The Close method in Microsoft Visual Basic.
Forms![Orders].Properties.Refresh The Refresh method of the Properties collection of the Orders form.
Although Andy Baron, the author of http://doc.advisor.com/doc/05352 , strongly disagrees.
For bang vs dot (! vs .) also see this site, http://www.database-wizards.com/micr...isual_basi.htm
This site also talks about the use of square brackets.
This is the day the Lord has made, I will rejoice and be glad in it.