Error 2046 with DoCmd.RunCommand acCmdFreezeColumn

I am bringing up a subform as a datasheet inside a form.  I would like to freeze the first three columns.  I do this using code like this in the Form_Open event:

  Me.Col1.SetFocus
  DoCmd.RunCommand acCmdFreezeColumn
  Me.Col2.SetFocus
  DoCmd.RunCommand acCmdFreezeColumn
  Me.Col3.SetFocus
  DoCmd.RunCommand acCmdFreezeColumn

This used to work.  However, I added a GotFocus event to Col3 and now after executing that code, the next time it tries to execute the DoCmd statement I get Error 2046 "command isn't available".

I have tried a number of things to try and get this to work:
1) Trapped and ignored the error:  The problem is that the columns don't come up in the right order anymore.
2) Set a boolean value so that I could skip all of the code in the GotFocus event during the Open_Form event:  This doesn't work.  It seems that just going to the event even if there is no code there causes the problem.
3) Added a pause:  even with pause as long as 10 seconds this didn't work.

Is there a solution?  The only things I can think of are:
1) Is there a way to deactivate an event completely and then reactivate it?
2) Is there a way to create the event programatically?  Then I could create it after I execute the other code.



LVL 2
dastrwAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

faz136Commented:
It may work if you remove the [Event Procedure] tag from the got focus line of the properties, then at the end of your code put the line col3.OnGotFocus = "[Event Procedure]"
 
I generally use this to assign functions to events at runtime
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
GreymanMSCCommented:
faz136 has a good idea.  To prevent the on got focus event from running when you set focus to a control simply set the property to "".  Don't forget to put it back to "[Event Procedure]" when you are done.

Specifically:

  Me.Col3.OnGotFocus = ""
  Me.Col3.SetFocus
  DoCmd.RunCommand acCmdFreezeColumn
  Me.Col3.OnGotFocus = "[Event Procedure]"
0
dastrwAuthor Commented:
I'm having trouble with the syntax so when I set focus to the control it can't find the 'macro' that I created.

If my event is called Col3_GotFocus() what should I put between the double-quotes in the assignment statement?

I tried:

Me.Col3.OnGotFocus = "Col3_GotFocus"
Me.Col3.OnGotFocus = "Col3_GotFocus()"
Me.Col3.OnGotFocus = "[Col3_GotFocus]"

None of these worked.
0
dastrwAuthor Commented:
Duh!

I put the words [Event Procedure] in and it worked!

This is a great trick that I will be able to use in a lot of places.  Thanks for the help!
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Microsoft Access

From novice to tech pro — start learning today.