The Linux Page

The Expression On Load you entered as the event property setting produced the following error: User-defined type not defined

Problem

A few days ago, I made many updates in one of the MS-Access forms I'm working on.

Then, when I tried to open the form I'd get this error...

The Expression On Load you entered as the event property setting produced the following error: User-defined type not defined

This doesn't mean anything to me since I did not define any type... Removing the Form_Load function (commenting it out) made that very error go away, however, since that's the sub-form of another form, it still generates errors when the main form is trying to initialize the sub-form.

Note that it mentions OnLoad(). Commenting out that function doesn't remove the error so the problem is not that function.

Now the error is:

Run-time error '40036':

Method 'Form' of object '_SubForm' failed

So I still have a problem...

Solution

Thinking about it, I thought that would come from a function I changed, but I could not remember specifically which one that would be. I changed many functions all at once...

So to find it, I finally cut out all the functions from the macro file and saved them in a .txt file with NotePad. Then I copied those back, one by one, and tried to open the form each time. Worked great up until I pasted the offensive function.

The fact is the list of parameters is what causes this problem (at least in this case, but it sounds that in many cases, that's the problem!)

The function that broke my MS-Access application was:

    Private Function Foo(Code As Code)

Little mistake... Code is a Long! So, look at the error: "User-defined type not defined", very cryptic if you ask me since I never intended to create a "user-defined type," but that was indeed the problem.

So, I changed my function to this and it works like a charm again:

    Private Function Foo(Code As Long)

Answers found on the Internet

Before finding the solution presented here, I read many posts on forums from people who would explain to others why they were getting this error.

The fact is that 99% of the time those answers were wrong.

Examples:

  • That form is screwed, you have to start from scratch again1
  • The direct access of the SubForm variable requires a "Me." introducer (why?! it worked just fine for 3 years without it???)
  • The "Set ..." instruction should not be there (this is in reference to setting the form recordset, that's an object and the Set ... is required)
  • Your database is broken, you need to regenerate it
  • The code was not compiled properly, you need to recompile and look at the errors (not too sure how you do that, I haven't seen a "Compile" option in MS-Access, it looks quite automated to me! But that would have been great...)
  • 1. Is that guy kidding me?!?

Re: The Expression On Load you entered as the event property ...

He seems to be correct, I had this issue and it caused serious delays and backtracking. I think the problem is fully identified based on the following:

Access apparently cannot recognize any event procedures if one of them is out of whack. So in my case, I had a mouse move event I needed to implement over an image. When I clicked the mousemove event, then selected code, the function it gave me looked like this:
Private Sub Device_Type_Info_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

end sub

I did not understand why all those arguments were added, I'm not using them... so I stupidly deleted all the arguments. Alas, after that not a single event was recognized and this error popped up every time any event on this form occurred, none would run.... I finally back tracked and either reapplied the arguments or just deleted that event function and started over on it... lesson learnt: don't mess with the event sub declaration statements.