I'm building a userform where it has two text boxes to enter dates. Once the date is entered, I'm validating them when the Exit
event fires. If the validation turns up that the user data isn't what is needed, the user is notified, the text box is cleared, and the focus is returned back to the textbox.
The issue comes if the user uses the mouse to select outside of the box, rather than Tab. If Tab is used, it fires perfectly and as expected, and the field is cleared and the focus is returned. If the mouse is used, it doesn't fire. According to this article, this is expected behavior (It's for Access, but I didn't see the similar relevant MSDN article for Excel.)
So instead I tried the AfterUpdate
event. However, SetFocus
doesn't work within an AfterUpdate
event, I'm assuming because of the chain of events as outlined in the response to this question. Thus, I don't have a way to return the focus back to the textbox after it has fired. That thread had a suggestion as an alternate answer to SetFocus
to another control and come back as a workaround, but that doesn't work for me, so I assume that may be an Access-specific workaround.
My last option I've considered is having the AfterUpdate
event just call the Exit
event, however the Exit
event has a required argument (ByVal Cancel As MSForms.ReturnBoolean)
, which is how you cancel out of the exit and return the user to the textbox. As such, there isn't a value that you can pass to it that doesn't throw an error that I can find (the closest I found was passing Nothing
but it failed out when trying to set it to True
later to cancel the exit.)
Is there a way to achieve what I'm looking for here, or should I just stick to the AfterUpdate
and ignore the SetFocus
I'm trying to achieve?