VBA - 한 양식에서는 작동하지만 다른 양식에서는 작동하지 않는 동적 생성 콤보 상자, 클래스 모듈 문제가 있습니까?

VBA - 한 양식에서는 작동하지만 다른 양식에서는 작동하지 않는 동적 생성 콤보 상자, 클래스 모듈 문제가 있습니까?

안녕하세요 & 읽어주셔서 감사합니다: 이것은 OZGRID의 교차 게시물입니다:https://www.ozgrid.com/forum/index.php?thread/1227932-dynamic-created-combo-box-working-on-one-form-but-not-other-class-module-issue/ 아직 운이 없었습니다. 여기저기서 해결되는 대로 업데이트하겠습니다.

동일한 클래스 모듈을 참조하려고 시도하는 동적으로 생성된 콤보 상자가 있는 두 가지 양식이 있습니다.

첫 번째는 예상대로 작동하지만 새 양식에서 내 코드에 문제가 있는 것을 볼 수 없습니다.

클래스 모듈 코드는 다음과 같습니다.

Option Explicit
Private WithEvents m_ComboBoxEvents As MSForms.ComboBox
Public Property Set Box(RHS As MSForms.ComboBox)
Set m_ComboBoxEvents = RHS
End Property
Private Sub m_ComboBoxEvents_Change()
If REACTIONS.Visible = True Then
Debug.Print "hELlO"
'\\ WHEN COMBOBOX CHANGES ON REACTION FORM IT PASSES THE CAPTION INFORMATION FOR THE BUTTONS.
If Len(Box.Name) = 7 Then REACTIONS.Frame20.Controls("MyNCBtn" & Right(Box.Name, 1)).Caption = Box.List(Box.ListIndex, 1) ' will only work until 9
If Len(Box.Name) = 8 Then REACTIONS.Frame20.Controls("MyNCBtn" & Right(Box.Name, 2)).Caption = Box.List(Box.ListIndex, 1) ' will work until 99
End If
Debug.Print "Hi"
If UFSTDRDS.Visible = True Then
MsgBox ("Hello")
End If
End Sub
Public Property Get Box() As MSForms.ComboBox
Set Box = m_ComboBoxEvents
End Property

양식 코드는 여기에 있습니다.

Sub Not_Working()
Dim clsComboBox As New cComboBox
Dim MyCBx As MSForms.ComboBox
Dim m_colComboBoxEvents As Collection ' If I remove this line I get variable undefined error in next line, but it is not required in the working code above
Set m_colComboBoxEvents = New Collection
Loop starts here
Set MyCBx = Me.MultiPage1.Pages(2).Controls.Add("Forms.ComboBox.1", "MyNCBox" & x, 1)
Dim MyCBxfill As Variant
MyCBxfill = ws1.Range("A1").CurrentRegion
With MyCBx
.Top = 280 + ((x - 1) * 30)
.Left = 250
.Width = 350
.Height = 20
.FontSize = 8
.FontName = "Times New Roman"
.ColumnCount = UBound(MyCBxfill, 2)
'.ColumnWidths = ",0"
.List = MyCBxfill
End With
Set clsComboBox = New cComboBox
Set clsComboBox.Box = MyCBx
m_colComboBoxEvents.Add clsComboBox, CStr(m_colComboBoxEvents.Count + 1)
Loop ends here
End Sub

ozgrid 사이트를 스크롤하면 test.xlsb라는 예가 있습니다. (참고로 텍스트 교환이 몇 번 있었지만 아직 아무도 솔루션을 제공하지 않았습니다.) 거기에 더 자세한 내용도 있지만 너무 많이 포함시킨 것 같습니다. 해당 게시물에 대한 세부정보입니다. 어떤 이유로 수업이 나에게 효과가 없습니다.

나는 완전히 새로운 접근 방식이나 대체 구문을 신경 쓰지 않습니다. 새 컨텍스트가 아닌 원래 컨텍스트에서 작동하는 이유를 알아낼 수 없습니다.

기존 코드에 대한 통찰력과 개선이 있으면 감사하겠습니다.

문안 인사

저스틴

답변1

아래에 자세히 설명된 대로 Rory @ Ozgrid.com이 해결했습니다.

귀하의 통합 문서를 보지 않았지만 두 번째 코드의 컬렉션 선언이 잘못된 위치에 있습니다. 이 줄은:

Dim m_colComboBoxEvents As Collection

모듈 수준에 있어야 합니다. 그렇지 않으면 루틴이 완료되자마자 변수가 지워지고 클래스의 인스턴스가 더 이상 남지 않습니다.

관련 정보