folks... Good practice and a general rule, means just that...
Dont go around finding the few exceptions where it MAY make sence...
GENERAL RULE AND GOOD PRACTICE is to.... *ugh*
Yes sometimes it makes sense to do something which in general is not a good idea... *ugh*
Claims of "good practice" need to be substantiated with good reasons or they amount to nothing more than assertions of common practice. It becomes dogma when those who question its wisdom are warned against such enquiry and their observations trivialised by further unsubstantiated statements of faith bolstered by disparaging language.
I have always been suspicious of general rules especially when applied without concern for their foundations and believe much can be learned by finding exceptions. Indeed the exception I outlined above tells me that this general rule is intrinsically flawed or at least in need of major ammendment.
Where the code refers entirely or almost entirely to controls in a particular object it makes sense to store it in the module associated with that object.
There is nothing intrinsically wrong with making part of that code public to allow the actions to be initiated from other modules. Arbitrarily separating part of the code which acts upon controls in that module, simply because it is also called from outside, does not make sense.
Standard modules do make sense when the actions are performed on multiple objects and there is no clear association of the overall process with any particular target object. However even in this circumstance where a set of procedures are performed on an object as part of a more elaborate set of procedures on multiple objects, I would call them from a single public procedure inside the target object's module which in turn would be called from the standard module.
It makes much more sense and is far easier to follow to pass a single command to each of the object modules and have their sequences completed within that module than to send line after line of commands from the standard module.
The proper use of a standard module is when virtually identical actions are performed on different objects allowing for the code to be entered once and performed within the context of each call.
It is highly useful and perfectly legitimate to call a procedure in another object module. The general rule is a simplistic assertion that lacks foundation.