2012-07-17 17 views
7

Voglio creare un modulo utente nel modulo utilizzando VBA a livello di programmazione. Sono un principiante e inesperto, quindi ho provato un paio di esempi, ma non soddisfano le mie esigenze.Creazione modulo a livello di programmazione nel modulo utilizzando vba

voglio solo macro che

  • crea un modulo utente all'interno di un modulo utilizzando VBA
  • ha una ListBox con alcuni dati
  • ha un controllo CommandButton con un listener

Ecco il codice che ho usato

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 

Ora non so come aggiungere ListBox e pulsante al modulo con un listener.

+0

Posta ciò che hai provato e leggi le FAQ http://stackoverflow.com/faq. Questo non è un luogo per ottenere risposte rapide, è un posto per l'apprendimento. –

+0

Aggiornamento della domanda – IConfused

+1

La creazione di intere forme in modo dinamico come questo di solito non funziona come si potrebbe pensare. A meno che tu non sia davvero in grado di fare una versione generica, almeno una specie di scheletro, questo sarà un bel po 'di lavoro inutile. – Brad

risposta

21

Dopo aver lavorato duro ho trovato una risposta molto semplice alla mia domanda. Potrebbe aiutarti anche

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

Cosa succede con 'NewFrame'? – Robino

Problemi correlati