2016-08-11 1 views
1

런타임에 두 개의 콤보 상자가있는 사용자 양식이 있다고 가정 해 봅니다. 첫 번째 콤보는 A1 : A2 (과일, 야채)의 항목을 제공합니다. 두 번째 콤보를 B1 : B2 (Apple, Orange) 또는 C1 : C2 (Carrot, Tomato)에서 원한다면 첫 번째 콤보에서 사용자가 선택한 것을 제외해야합니다.다른 개체를 수정할 수 없습니다 - 런타임 오류 91

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 개 나타납니다 변경 : "FoodClass"라는 내 수업 아래

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 

그런 다음 사용자 양식에 내 코드가있다. 한 개체를 다른 개체로 어떻게 수정합니까? UserForm_Initialize에서

+0

왜 VBA가 필요합니까? 두 개의 목록 상자를 가질 수 있고 두 번째 목록 상자에'Indirect'를 사용할 수 있습니다. –

+0

FoodClass 클래스에 두 개의 콤보가 있으며 두 개의 FoodClass 인스턴스를 만들지 만 각 인스턴스에는 초기화 된 콤보가 하나만 있습니다. 두 번째 것은 설정되지 않습니다. 그것이 오류 91이 나타나는 이유입니다. – dee

답변

1

때문에이 인스턴스가 두 콤보 상자가 초기화됩니다 FoodClass의 한 인스턴스를 생성 :

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

참고 : 대신 UserForm의 키워드 Me 사용자 정의 폼 클래스의 내부에 사용할 수 있습니다. Me은 UserForm의 현재 인스턴스를 나타냅니다.

call food.DrawCombo1(Me) 
+0

근무 중! :) 고맙습니다. 이 포럼은 훌륭합니다. 방금 남부의 어느 곳에서나 누군가의 삶을 더 편하게 만들었습니다. 내 매크로를 끝내면 내 회사의 약 130 명이 (잘하면 훌륭한) 도구를 얻을 수 있습니다 :) :) – Marecki

+0

도움이 된 것을 기쁘게 생각합니다! 행운을 빈다. :). – dee

관련 문제