I wouldn't call it ignorance. I worked without decompiling for 4 or 5 years before I learned about it. And if I'd have known about it sooner, I might not have gotten so frustrated.
Access doesn't truly do a compile in the sense that most people think of it unless you create an MDE or ADE. However, for efficiency (better performance), Access will take your code and do a sort of compile. Ultimately, your computer doesn't know what "If X=Y then" really means. So the VBA code must be turned into something machine readable at some point.
Also note that there is an option in the VBE (Visual Basic Editor) under the Debug menu to compile your code. Have you ever deleted or renamed a procedure in a BAS module that is used in a form somewhere? Did you get a syntax error when you deleted/renamed it? No. But if you do the compile, you find out.
I don't know all of the details. But when the code is saved, Access will assume that that code is all that will ever run. But when you go into VBE, and start changing code, Access knows it has to throw out whatever it thought was going to be the code and reinterpret that code for efficiency.
Where things get a little screwy is when you are running a form (not in Design Mode) and change the code. Then Access is trying to catch up with what you're doing. Also, if you rename objects (forms, reports, etc) Access has data that keeps track of those renames. At any rate, sometimes Access just loses track -- it has its improved performance code that it thinks is up-to-date when in fact it is not. The best way to get Access to catch up again is start Access with the /decompile parameter. Then it knows it has to throw out the old interpretations and start over.
It never hurts to /decompile. In fact, some "professional" developers will use it just before they are ready to put their code to a full test. You will know you need to /decompile when you know the code should be working but it doesn't. That gets a little tricky. A clear example is when you change the text of a message box (MsgBox) and the message displays the old text. (I have actually seen this!) In other situations, you have to be really, really sure it isn't a bug in your code that makes it seem that your code isn't executing.
I know that doesn't give you the full technical explanation behind this. But that is the essence of what is happening. Hope it helps.
Randall J Weers
Membership Vice President
Pacific NorthWest Access Developers Group