2012-07-17 33 views
7

Quiero crear un formulario de usuario en el módulo mediante VBA mediante programación. Soy un principiante e inexperto, así que probé algunos ejemplos, pero no están cumpliendo con mis requisitos.Crear formulario mediante programación en el módulo utilizando vba

sólo quiero macro que

  • crea un formulario de usuario dentro de un módulo usando VBA
  • tiene un cuadro de lista con algunos datos
  • tiene un CommandButton con un oyente

Aquí está el código que utilicé

Option Explicit 

Sub MakeuserForm() 
'Dim CommandButton1 As MsForms.CommandBarButton 
'Dim ListBox1 As MsForms.ListBox 
Dim UserForm1 As VBComponent 

Set UserForm1 = ActiveWorkbook.VBProject.VBComponents.Add(vbext_ct_MSForm) 
With UserForm1 
.Properties("Height") = 100 
.Properties("Width") = 200 
On Error Resume Next 
.Name = "My Form" 
.Properties("Caption") = "This is your user form" 
End With 
ShowForm 
End Sub 

Sub ShowForm() 
NewForm.Show 
End Sub 

Ahora no sé cómo agregar ListBox y el botón al formulario con un oyente.

+0

Publique lo que ha probado y lea las preguntas frecuentes en http://stackoverflow.com/faq. Este no es un lugar para obtener respuestas rápidas, es un lugar para aprender. –

+0

Se ha actualizado la pregunta – IConfused

+1

La creación de formas enteras dinámicamente como esta generalmente no funciona tan bien como se podría pensar. A menos que realmente no puedas hacer una versión genérica, al menos algún tipo de esqueleto, esto va a ser una gran cantidad de trabajo innecesario. – Brad

Respuesta

21

Después del trabajo duro, he encontrado una respuesta muy simple a mi pregunta. Puede ayudarte también

Sub CreateUserForm() 
Dim myForm As Object 
Dim NewFrame As MSForms.Frame 
Dim NewButton As MSForms.CommandButton 
'Dim NewComboBox As MSForms.ComboBox 
Dim NewListBox As MSForms.ListBox 
'Dim NewTextBox As MSForms.TextBox 
'Dim NewLabel As MSForms.Label 
'Dim NewOptionButton As MSForms.OptionButton 
'Dim NewCheckBox As MSForms.CheckBox 
Dim X As Integer 
Dim Line As Integer 

'This is to stop screen flashing while creating form 
Application.VBE.MainWindow.Visible = False 

Set myForm = ThisWorkbook.VBProject.VBComponents.Add(3) 

'Create the User Form 
With myForm 
    .Properties("Caption") = "New Form" 
    .Properties("Width") = 300 
    .Properties("Height") = 270 
End With 

'Create ListBox 
Set NewListBox = myForm.designer.Controls.Add("Forms.listbox.1") 
With NewListBox 
    .Name = "lst_1" 
    .Top = 10 
    .Left = 10 
    .Width = 150 
    .Height = 230 
    .Font.Size = 8 
    .Font.Name = "Tahoma" 
    .BorderStyle = fmBorderStyleOpaque 
    .SpecialEffect = fmSpecialEffectSunken 
End With 

'Create CommandButton Create 
Set NewButton = myForm.designer.Controls.Add("Forms.commandbutton.1") 
With NewButton 
    .Name = "cmd_1" 
    .Caption = "clickMe" 
    .Accelerator = "M" 
    .Top = 10 
    .Left = 200 
    .Width = 66 
    .Height = 20 
    .Font.Size = 8 
    .Font.Name = "Tahoma" 
    .BackStyle = fmBackStyleOpaque 
End With 

'add code for listBox 
lstBoxData = "Data 1,Data 2,Data 3,Data 4" 
myForm.codemodule.insertlines 1, "Private Sub UserForm_Initialize()" 
myForm.codemodule.insertlines 2, " me.lst_1.addItem ""Data 1"" " 
myForm.codemodule.insertlines 3, " me.lst_1.addItem ""Data 2"" " 
myForm.codemodule.insertlines 4, " me.lst_1.addItem ""Data 3"" " 
myForm.codemodule.insertlines 5, "End Sub" 

'add code for Comand Button 
myForm.codemodule.insertlines 6, "Private Sub cmd_1_Click()" 
myForm.codemodule.insertlines 7, " If me.lst_1.text <>"""" Then" 
myForm.codemodule.insertlines 8, "  msgbox (""You selected item: "" & me.lst_1.text)" 
myForm.codemodule.insertlines 9, " End If" 
myForm.codemodule.insertlines 10, "End Sub" 
'Show the form 
VBA.UserForms.Add(myForm.Name).Show 

'Delete the form (Optional) 
'ThisWorkbook.VBProject.VBComponents.Remove myForm 
End Sub 
+0

¿Qué pasa con 'NewFrame'? – Robino

Cuestiones relacionadas