If you want an explanation with roots in the implementation, here is one.
When you define an class, there is the data part, and the code part..
When you instance an object from a given class, the 'data part' is created
in memory, in different memory addresses for each object, but the code_part,
which also lives in memory, is common to all the objects of the given class.
(It would be inefficient, memory wise, to store the code_part for each
different objects of the same class).
So, when the code run, from the code_part, the code may have to use a value
of the unique object who has called the code, in other word, the running
code has to be able to reach the RIGHT data_part of the RIGHT object, that
is what ME stands for: the data_part associated to the real object which
has called the code to run.
Sure, a FORM is a CLASS, and generally, you use only ONE object of a given
Form, so the 'class' thing seems to be an overworked solution, BUT you can,
indeed, open the same form many times (through code, not through the User
Interface), and then, ME takes all its importance.
Vanderghast, Access MVP