2012-07-17 17 views
7

プログラムでVBAを使用してモジュールにユーザーフォームを作成したいとします。私は初心者で経験不足なので、いくつかの例を試しましたが、私の要件を満たしていません。vbaを使用してモジュールでプログラムでフォームを作成

は、私はちょうどマクロが

  • はVBA
  • を使用して、モジュール内のユーザーフォームを作成すること
  • がある

ここでリスナーにCommandButtonを持っているいくつかのデータを持つリストボックスを持っていたいです私が使用したコード

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 

今ListBoxとボタンをリスナーでフォームに追加する方法がわかりません。

+0

お手数ですが、FAQのhttp://stackoverflow.com/faqをお読みください。これは、学習の場である迅速な回答を得るための場所ではありません。 –

+0

質問が更新されました – IConfused

+1

このようなフォーム全体を動的に作成することは、通常と同様にうまくいくとは言えません。あなたが本当に一般的なバージョン、少なくとも何らかの骨格を作ることができない限り、これはたくさんの不必要な作業の完全な進歩になるでしょう。 – Brad

答えて

21

ハードワークの後、私は私の質問に非常に簡単な答えを見つけました。あなたにも役立つかもしれません。

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

'NewFrame'とは何ですか? – Robino

関連する問題