XL97: Problems When you use Macro to Add Control to UserForm

Last reviewed: March 13, 1998
Article ID: Q157319
The information in this article applies to:
  • Microsoft Excel 97 for Windows

SYMPTOMS

In Microsoft Excel 97, you may have difficulty adding a control to a UserForm programmatically. For example, if you run the following macro code:

   Sub Add_Control_Test()

       Set y = UserForm1.Controls.Add("Forms.CheckBox.1","MyControl",true)

   End Sub

you will not receive an error, but the checkbox control is not added to the UserForm.

CAUSE

The aforementioned macro will not add the control to the UserForm because this syntax for the Add method only applies during run-time. That means you have to include this macro code in an event procedure tied to the UserForm.

RESOLUTION

Microsoft provides examples of Visual Basic for Applications procedures 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. The Visual Basic procedures in this article are provided 'as is' and Microsoft does not guarantee that they can be used in all situations. While Microsoft support engineers can help explain the functionality of a particular macro, they will not modify these examples to provide added functionality, nor will they help you construct macros to meet your specific needs. If you have limited programming experience, you may want to consult one of the Microsoft Solution Providers. Solution Providers offer a wide range of fee-based services, including creating custom macros. For more information about Microsoft Solution Providers, call Microsoft Customer Information Service at (800) 426-9400.

If you want use the above macro to add a check box control to a UserForm during run time, do the following:

  1. Open a new Microsoft Excel workbook.

  2. In the Visual Basic Editor, insert a new UserForm.

  3. With the UserForm active, click Code on the View menu.

  4. Click the Procedure drop-down in the UserForm1(Code) window and select Initialize in the drop-down list.

The cursor will now be blinking in the middle of a UserForm_Initialize() subroutine.

  1. Add code to this subroutine so it resembles the following:

       Private Sub UserForm_Initialize()
    
           Set y = UserForm1.Controls.Add("Forms.CheckBox.1","MyControl",true)
    
       End Sub
    
    
To verify that the check box control called "MyControl" was added during run time, add another on event procedure to the UserForm you inserted in step 2.

  1. Click the Procedure drop-down in the UserForm1(Code) window and select AddControl in the drop-down list.

  2. Add code to this subroutine so it resembles the following:

       Private Sub UserForm_AddControl(ByVal Control As MSForms.Control)
    
           UserForm1.Controls(CheckBox1).Caption = "test"
    
       End Sub
    
    

  3. Click the UserForm window to activate the UserForm.

  4. Press the F5 key to run the UserForm.

The UserForm will appear in run time with a single check box displayed (the caption on this check box will be "test", without quotation marks).

NOTE: When you dismiss the UserForm, the check box will not remain on the UserForm.

To programmatically add a control to a UserForm so that it becomes part of the UserForm, you must add it during Design Time. To programmatically add a control during Design Time, do the following:

  1. Working with the same project from above, click Module on the Insert menu to add a module sheet to the project.

  2. In the new module sheet, enter the following code:

          Sub Design_time_control()
    
              Set x = Application.VBE.ActiveVBProject.VBComponents. _
                  Item("UserForm1").Designer. _
                  Controls.Add("Forms.CheckBox.1", "MyCheckbox", True)
    
              x.Caption = "test"
    
          End Sub
    
    

  3. Place your cursor somewhere within the code you entered in Step 2.

  4. Press the F5 key to run the macro.

Your UserForm will have a check box added to it and the caption on the check box will be "test", without quotation marks.

STATUS

Microsoft has confirmed this to be a problem in the Microsoft products listed at the beginning of this article. We are researching this problem and will post new information here in the Microsoft Knowledge Base as it becomes available.

REFERENCES

For more information about adding controls to UserForms programmatically, do the following:

  1. Insert a UserForm into your project.

  2. Click Code on the View menu.

  3. On a blank line on the UserForm(code) window type "Add", without quotation marks.

  4. Highlight the word "Add" you typed in Step 3 and press F1.

The Add Method screen of the Microsoft Forms Reference will appear.


Additional query words: XL97 vbe vba
Keywords : kbcode kbprg xlvbahowto xlvbainfo
Version : WINDOWS:97
Platform : WINDOWS
Issue type : kbhowto


THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Last reviewed: March 13, 1998
© 1998 Microsoft Corporation. All rights reserved. Terms of Use.