It's all about scope for me .. what other function or variable does my event need to see to do it's job effectively? I also think in terms of reusability. How many times will I use this scrap of code in this db?
I use a private subroutine when I just need a little something that only pertains to that event and doesn't apply anywhere else.
I use a form function when I am doing something specifically for that form and that form only (e.g., form validation) because it isn't applicable any where else. In this manner events for that form can have access to the form function and use it without abandon.
I use a module function when I am doing something database wide meaning it has application all over the database.
Lets say I have a little sub that does something and I notice that I am using that little something on all of my forms. I will move that little something into a module and then when I call the sub, I point it to the module. This just makes the code a little cleaner and saves me time because I don't have to rewrite and rewrite - just write once and use a gabillion times.
Sometimes when I have alot of subs and I am thinking, 'Wow, those are really similar!' I will spend time making a module that uses generic variables to handle all of the similar aspects between the little subs. In my little pretend made up world, I call that code normalization.
Last, if something is going to take 100 lines to write, I will shove it into a module just to get it out of my form code because I don't wanna be scrolling through it trying to scan through all of the 6-line events.
-dK