WD2000: UserForm Tabbing Order Problems Using Frame Controls

ID: Q238395


The information in this article applies to:


SYMPTOMS

When you place a Frame control (in the Visual Basic Editor, on the View menu, click Toolbox) on a Visual Basic for Applications UserForm and then you do the following:

Several problems may occur as follows:
  1. When you run your macro to show the UserForm, if you have set a control within the Frame control to have focus by setting its TabIndex property to 0 (zero), the control does not gain focus. For example, the insertion point is not within a TextBox control indicating where your user should begin typing.


  2. If you set the TabStop property for the Frame control to False, when you press TAB to cycle through controls on the UserForm, you can only tab between the controls outside of the Frame control.


  3. When you click a control within the Frame control, you can tab through the control(s) within the Frame control; however, after you quit the Frame control (tab to controls outside of the Frame control), you cannot tab back to the control(s) within the Frame control.


  4. Working around the focus problem as described in item 1 by forcing focus using the SetFocus method, for example, TextBox1.SetFocus, in the Activate event of the UserForm, still introduces the tabbing problem as defined in item 3.


  5. Working around the item 2 problem by setting the TabStop property to True for the Frame control does not set the focus to the control you designated as first in the tabbing order. When you press TAB, the control whose TabIndex property is set to 0 is skipped, and focus is set to the control whose TabIndex property is set to 1 (or next in line in the tabbing order).



WORKAROUND

Microsoft provides programming examples for illustration only, without warranty either expressed or implied, including, but not limited to, the implied warranties of merchantability and/or fitness for a particular purpose. This article assumes that you are familiar with the programming language being demonstrated and the tools used to create and debug procedures. Microsoft support professionals can help explain the functionality of a particular procedure, but they will not modify these examples to provide added functionality or construct procedures to meet your specific needs. If you have limited programming experience, you may want to contact a Microsoft Certified Solution Provider or the Microsoft fee-based consulting line at (800) 936-5200. For more information about Microsoft Certified Solution Providers, please see the following page on the World Wide Web:

http://www.microsoft.com/mcsp/
For more information about the support options available from Microsoft, please see the following page on the World Wide Web:

http://www.microsoft.com/support/supportnet/overview/overview.asp
To allow tabbing through all controls on a UserForm, regardless of whether they are located in the Frame control or outside of the Frame control, you can set the TabStop property for the Frame control to True. However, you cannot set the control focus to the first control in your TabIndex tab order that is within the Frame control. To work around this problem, you can set focus to another control first and then reset the focus to the control that you want to have the focus when you show your UserForm.

For example, the following Visual Basic for Applications procedure assumes you have a UserForm with a Frame control and at least two Textbox controls within the Frame control. Also, you have two CommandButton controls placed outside of the Frame control.

You have set the following properties for each control:


           Frame   Textbox1   TextBox2   CommandButton1   CommandButton2
TabIndex:    0        0          1            0                1
TabStop:   True     True        True        True             True 

Place the following commands in the Activate event of your UserForm:

Private Sub UserForm_Activate()
   TextBox2.SetFocus
   TextBox1.SetFocus
End Sub 
To view the Activate event for your UserForm:
  1. Click to select your UserForm.


  2. On the View menu, click Code.


  3. In the code window, click the Procedure list box to select Activate.



STATUS

Microsoft has confirmed this to be a problem in the Microsoft products listed at the beginning of this article.


MORE INFORMATION

For more information about UserForms, in the Visual Basic Editor, click Microsoft Visual Basic Help on the Help menu, type UserForm in the Office Assistant or the Answer Wizard, and then click Search to view the topic.

For more information about the TabStop property, in the Visual Basic Editor, click Microsoft Visual Basic Help on the Help menu, type TabStop property in the Office Assistant or the Answer Wizard, and then click Search to view the topic.

For more information about the TabIndex property, in the Visual Basic Editor, click Microsoft Visual Basic Help on the Help menu, type TabIndex property in the Office Assistant or the Answer Wizard, and then click Search to view the topic.

For more information about getting help with Visual Basic for Applications, please see the following Microsoft Knowledge Base article:

Q226118 OFF2000: Programming Resources for Visual Basic for Applications

For more information about using the sample code in this article, please see the following article in the Microsoft Knowledge Base:
Q212536 OFF2000: How to Run Sample Code from Knowledge Base Articles

Additional query words: vba


Keywords          : kbdta kbwordvba wd2000 
Version           : WINDOWS:2000
Platform          : WINDOWS 
Issue type        : kbbug 

Last Reviewed: August 2, 1999