2017-12-14 8 views
0

私は "ComboTest2"と呼ばれるユーザーフォームの問題があります。 2つのコンボボックスで構成されています。 USerformをオブジェクトとしてインスタンス化すると、次のコードは、Userformの2番目のコンボボックスに目的のデータが含まれていないという意味では機能しません。VBAユーザーフォームコンボボックスのインスタンス化

Sub FillCombo(ByVal row As Long) 

    Dim rgCities As Range 
    Set rgCities = Worksheets("Tabelle2").Range("B2:D2").Offset(row) 
    ComboTest2.ComboBox2.Clear 
    ComboTest2.ComboBox2.List = WorksheetFunction.Transpose(rgCities) 
    ComboTest2.ComboBox2.ListIndex = 0 

End Sub 

Sub FillMain() 

    Dim ComboForm2 As ComboTest2 
    Set ComboForm2 = New ComboTest2 
    ComboForm2.Show 

End Sub 

ユーザーフォーム-コード:

Private Sub CommandButton1_Click() 
    Me.Hide 

End Sub 

Private Sub CommandButton2_Click() 
    Me.Hide 
End Sub 

Private Sub ComboBox1_Change() 
    FillCombo ComboBox1.ListIndex 
End Sub 

Private Sub UserForm_Initialize() 

    ComboBox1.List = Worksheets("Tabelle2").Range("A2:A5").Value 
    ComboBox1.ListIndex = 0 
    FillCombo ComboBox1.ListIndex 
End Sub 

しかし、私は私がFillMainサブを変更することを意味VBAによる "既定のインスタンス" を使用する場合:

Sub FillMain2() 

    Dim ComboForm2 As ComboTest2 
    Set ComboForm2 = New ComboTest2 
    'ComboForm2.Show 
    ComboTest2.Show 

End Sub 

を次にすべてがうまくあります。どうしてこんなことに?

敬具

答えて

0

FillCombo名前でユーザーフォームを参照しているので、デフォルトのインスタンスに(あなたが実際にフォームの新しいインスタンスを作成している)からです。そのコードがuserformになく、なぜフォーム外にあるのかわからない場合は、コンボボックスを引数として渡す必要があります。

+0

ありがとうロリー、これは私を助けます。私は "FillCombo" SubのようなSubsをUserFormコードに統合しないように言われました。彼らはいいプログラミングスタイルではないと言った。 –

+0

@Philipp_PK書かれているように、それはそのフォームとそのコンボボックスに固有なので、フォームの外にあることは全く意味がありません。 – Rory

関連する問題