2016-08-11 4 views
1

実行時に作成された2つのコンボボックスを持つユーザーフォームがあるとします。最初のコンボは、A1:A2(フルーツ、野菜)のアイテムをソースします。 B1:B2(アップル、オレンジ)またはC1:C2(キャロット、トマト)から2番目のコンボをソースにしたいと思っています。 「FoodClass」別のオブジェクトを変更できない - ランタイムエラー91

Option Explicit 

Public WithEvents MyCombo1 As MSForms.ComboBox 
Public WithEvents MyCombo2 As MSForms.ComboBox 

Public Sub DrawCombo1(oParent) 
Set MyCombo1 = oParent.Controls.Add("Forms.ComboBox.1", "Combo1", True) 
    With MyCombo1 
     .Top = 20 
     '(...) setting position 
     .RowSource = "A1:A2" 'Fruits;Vegetables 
    End With 
End Sub 

Public Sub DrawCombo2(oParent) 
    Set MyCombo2 = oParent.Controls.Add("Forms.ComboBox.1", "Combo2", True) 
    With MyCombo2 
     '(seting position) 
    End With 
End Sub 

Public Sub MyCombo1_Change()'When user chose from combo 1... 
    If MyCombo1.Value = "Fruits" Then MyCombo2.RowSource = "B1:B2" 'Apple;Orange 
    If MyCombo1.Value = "Vegetables" Then MyCombo2.RowSource = "C1:C2"'Carrot;Tomato 
End Sub 

という名前の私のクラスの下にはその後、私のコードは、ユーザーフォームにあります:

Option Explicit 

Public ComboBox1 As FoodClass 
Public Combobox2 As FoodClass 

Private Sub UserForm_Initialize() 

    Set ComboBox1 = New FoodClass 
    Call ComboBox1.DrawCombo1(UserForm) 

    Set Combobox2 = New FoodClass 
    Call Combobox2.DrawCombo2(UserForm) 

End Sub 

たびに、ユーザーが91最初に表示されるコンボボックスのエラーを変更します。あるオブジェクトを別のオブジェクトで変更するにはどうすればよいですか? UserForm_Initialize

+0

なぜVBAが必要ですか? 2つのリストボックスを持ち、2つ目のリストボックスに「間接」を使用することができます –

+0

FoodClassクラスに2つのコンボがあり、2つのインスタンスのFoodClassを作成しますが、各インスタンスには1つのコンボしか初期化されません。 2番目は設定されていません。そのため、エラー91が表示されます。 – dee

答えて

1

FoodClassのただ一つのインスタンスを作成しますので、このインスタンスが初期化され、両方のコンボボックスを持っています:

dim food as FoodClass 
Set food = New FoodClass 
call food.DrawCombo1(UserForm) 
call food.DrawCombo2(UserForm) 

注:代わりにUserFormMeは、ユーザーフォームクラスの内部で使用することができますキーワード。 Meは、UserFormの現在のインスタンスを参照します。

call food.DrawCombo1(Me) 
+0

作業中! :) ありがとうございました。このフォーラムは素晴らしいです。あなたはちょうど誰かの人生をポーランド南部のどこかで楽にしました。私のマクロを完成させるとき、私の会社の約130人が(うまくいけば偉大な)ツールを手に入れます:) :) – Marecki

+0

私はそれが助けてうれしいです!幸運を願っています :)。 – dee

関連する問題