2012-05-11 13 views
13

Estoy intentando agregar botones dinámicamente a la forma de usuario, pero la forma de usuario simplemente aparece en blanco. Ive simplifica la esencia del código tanto como sea posible para la comprobación de errores (no es que me ha ayudado)Adición dinámica de etiquetas al formulario de usuario = Formulario de usuario en blanco

Sub addLabel() 
UserForm2.Show  
Dim theLabel As Label 
Dim labelCounter As Integer 

For labelCounter = 1 To 3 
    Set Label = UserForm2.Controls.Add("Forms.Label.1", "Test" & labelCounter, True) 
    With theLabel 
     .Caption = "Test" & labelCounter 
     .Left = 10 
     .Width = 50 
     .Top = 10 
    End With 
End Sub 

¿Hay alguna manera de comprobar si los botones se han añadido, pero son invisibles? O por qué no están siendo agregados. Cualquier ayuda muy apreciada.

Respuesta

20

algunas cosas:

  1. Tiene que mostrar su formulario de usuario como vbModeless - de lo contrario el código de paradas en UserForm2.Show
  2. Estás creando un objeto llamado Label a continuación, utilizando With en theLabel
  3. Se hará luego necesita incrementar la posición de sus tres etiquetas para evitar la superposición (lo que he hecho usando Top).

    Sub addLabel() 
    UserForm2.Show vbModeless 
    Dim theLabel As Object 
    Dim labelCounter As Long 
    
    For labelCounter = 1 To 3 
        Set theLabel = UserForm2.Controls.Add("Forms.Label.1", "Test" & labelCounter, True) 
        With theLabel 
         .Caption = "Test" & labelCounter 
         .Left = 10 
         .Width = 50 
         .Top = 10 * labelCounter 
        End With 
    Next 
    End Sub 
    
+0

Gracias mucho por los comentarios. Copio y pegué su código directamente en el módulo UserForm2, presione f5, el formulario se carga, pero todavía está completamente en blanco. Incluso abrí un nuevo libro de trabajo, repití los pasos anteriores, guardé el nuevo libro de trabajo y presioné ejecutar y solo una forma de usuario en blanco. ¿Hay potencialmente una configuración que deba cambiar o algo externo al código, ya que su código parece que hace exactamente lo que yo quería que hiciera, pero no es así? S ¡Gracias de nuevo! – BiGXERO

+0

@BiGXERO intenta ejecutar el código desde un módulo estándar. – brettdj

+1

¡OMG! ¡Por supuesto! Muchas gracias. Es por eso que amo este sitio. ¡Eres una buena persona! – BiGXERO

-4

intento por debajo de código

Set theLabel = UserForm2.Designer.Controls.Add("Forms.Label.1", "Test1", True) 
+0

personas que votaron negativamente al menos dicen por qué ... –

+0

El uso de Designer es flojo y peligroso en este caso. Muestra una falta de comprensión del objeto Forms y cómo interactuar con ellos – FinancialRadDeveloper

Cuestiones relacionadas