Home |
Search |
Today's Posts |
|
#1
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
I am creating a user form and am trying to include in the code behind the
form functionality that will ensure that the user has filled in all of the required information. So I have a long "Validate Self" procedure that depends on a series of message boxes to tell the user that various bits of information have not been provided. Here's an example: Else If txtUserEmail.Value = "" Then 'if the user has not entered a name in the text box Dim Answer As VbMsgBoxResult Answer = MsgBox("You have not entered your e-mail address.", vbOKCancel) If Answer = 2 Then Exit Function Else Exit Function txtUserEmail.SetFocus End If End If End If What happens is that the message box doesn't disappear on the first click of any of the buttons or the "x" at the top right of the box. It takes several clicks for the message box to decide it's okay to disappear. And then, when it does disappear, it's not at all clear that the txtUserEmail text box is what has the focus. Any suggestions as to what I am doing wrong would be greatly appreciated! |
#2
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
if you have a loooooong laundry list of textboxes & other controls the
macro has to check individually before it does anything, that will take a lot of time. i suggest you try making the checks more generic & using a for next, if loop that will be a lot speedier. something like this.......... dim oControl as control For Each oControl In Me.Controls If oControl.Visible = True Then If TypeOf oControl Is msforms.TextBox Then If Len(oControl.Text) = 0 Then MsgBox "You must enter all visible fields!", vbExclamation + vbOKOnly oControl.SetFocus Exit Sub End If End If End If Next oControl obviously you could take out the visibility issue if you don't need it. you'll see that the macro automatically sets the focus on the offending textbox. or, as another idea, you could tag each textbox with a name of some sort & have the messagebox use that tag in the comment: MsgBox "You must enter the " & ocontrol.tag & " field!" hope it gets you started! :) susan On Feb 5, 10:19*am, Capt. Bangs wrote: I am creating a user form and am trying to include in the code behind the form functionality that will ensure that the user has filled in all of the required information. *So I have a long "Validate Self" procedure that depends on a series of message boxes to tell the user that various bits of information have not been provided. *Here's an example: * Else * * * * * * * * If txtUserEmail.Value = "" Then * * * 'if the user has not entered a name in the text box * * * * * * * * * * Dim Answer As VbMsgBoxResult * * * * * * * * * * Answer = MsgBox("You have not entered your e-mail address.", vbOKCancel) * * * * * * * * * * If Answer = 2 Then * * * * * * * * * * * * Exit Function * * * * * * * * * * Else * * * * * * * * * * * * Exit Function * * * * * * * * * * * * txtUserEmail.SetFocus * * * * * * * * * * End If * * * * * * * * End If * * * * * * End If What happens is that the message box doesn't disappear on the first click of any of the buttons or the "x" at the top right of the box. *It takes several clicks for the message box to decide it's okay to disappear. *And then, when it does disappear, it's not at all clear that the txtUserEmail text box is what has the focus. Any suggestions as to what I am doing wrong would be greatly appreciated! |
#3
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
In your embedded Else statement, you are executing the Exit Function
statement **before** you (try to) execute the SetFocus statement... that means the SetFocus statement is never being executed (the function is exited before it can happen). Try reversing those two statements (everywhere you have ordered it like that) and see if that makes your code execute the way you expect. Rick "Capt. Bangs" wrote in message ... I am creating a user form and am trying to include in the code behind the form functionality that will ensure that the user has filled in all of the required information. So I have a long "Validate Self" procedure that depends on a series of message boxes to tell the user that various bits of information have not been provided. Here's an example: Else If txtUserEmail.Value = "" Then 'if the user has not entered a name in the text box Dim Answer As VbMsgBoxResult Answer = MsgBox("You have not entered your e-mail address.", vbOKCancel) If Answer = 2 Then Exit Function Else Exit Function txtUserEmail.SetFocus End If End If End If What happens is that the message box doesn't disappear on the first click of any of the buttons or the "x" at the top right of the box. It takes several clicks for the message box to decide it's okay to disappear. And then, when it does disappear, it's not at all clear that the txtUserEmail text box is what has the focus. Any suggestions as to what I am doing wrong would be greatly appreciated! |
#4
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Rick,
Thanks. I did what you suggested. It still is requiring me to click on the OK button twice before the message box disappears, but the cursor is appearing in the text box that I wanted to have the focus, so that's a good thing. Thanks for your help! "Rick Rothstein (MVP - VB)" wrote: In your embedded Else statement, you are executing the Exit Function statement **before** you (try to) execute the SetFocus statement... that means the SetFocus statement is never being executed (the function is exited before it can happen). Try reversing those two statements (everywhere you have ordered it like that) and see if that makes your code execute the way you expect. Rick "Capt. Bangs" wrote in message ... I am creating a user form and am trying to include in the code behind the form functionality that will ensure that the user has filled in all of the required information. So I have a long "Validate Self" procedure that depends on a series of message boxes to tell the user that various bits of information have not been provided. Here's an example: Else If txtUserEmail.Value = "" Then 'if the user has not entered a name in the text box Dim Answer As VbMsgBoxResult Answer = MsgBox("You have not entered your e-mail address.", vbOKCancel) If Answer = 2 Then Exit Function Else Exit Function txtUserEmail.SetFocus End If End If End If What happens is that the message box doesn't disappear on the first click of any of the buttons or the "x" at the top right of the box. It takes several clicks for the message box to decide it's okay to disappear. And then, when it does disappear, it's not at all clear that the txtUserEmail text box is what has the focus. Any suggestions as to what I am doing wrong would be greatly appreciated! |
Reply |
Thread Tools | Search this Thread |
Display Modes | |
|
|
![]() |
||||
Thread | Forum | |||
SetFocus? | Excel Programming | |||
SetFocus on a different sheet in VBA | Excel Discussion (Misc queries) | |||
setfocus | Excel Programming | |||
SetFocus Question | Excel Programming | |||
SetFocus method in VBA | Excel Programming |