![VBA – Dynamisch erstellte Kombinationsbox funktioniert auf einem Formular, auf einem anderen jedoch nicht. Problem mit dem Klassenmodul?](https://rvso.com/image/1628789/VBA%20%E2%80%93%20Dynamisch%20erstellte%20Kombinationsbox%20funktioniert%20auf%20einem%20Formular%2C%20auf%20einem%20anderen%20jedoch%20nicht.%20Problem%20mit%20dem%20Klassenmodul%3F.png)
Hallo und Danke fürs Lesen: Dies ist ein Crosspost von OZGRID:https://www.ozgrid.com/forum/index.php?thread/1227932-dynamic-created-combo-box-working-on-one-form-but-not-other-class-module-issue/ Ich hatte da bisher kein Glück und werde hier oder dort ein Update veröffentlichen, sobald das Problem behoben ist.
Ich habe zwei Formulare mit dynamisch erstellten Kombinationsfeldern, die versuchen, auf dasselbe Klassenmodul zu verweisen.
Das erste funktioniert wie erwartet und ich kann das Problem mit meinem Code auf dem neuen Formular nicht erkennen.
Der Code des Klassenmoduls ist hier:
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
Den Formularcode finden Sie hier.
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
Wenn Sie auf der Ozgrid-Site durchblättern, finden Sie ein Beispiel mit der Bezeichnung „test.xlsb“ (NB: Es gab einige Textaustausche, aber bisher hat noch niemand eine Lösung bereitgestellt). Dort finden Sie auch weitere Einzelheiten, aber ich denke, ich habe in diesem Beitrag zu viele Einzelheiten angegeben. Aus irgendeinem Grund funktioniert die Klasse bei mir nicht.
Ich habe nichts gegen einen völlig neuen Ansatz oder eine alternative Syntax. Ich kann nur nicht verstehen, warum es im ursprünglichen Kontext funktioniert und nicht im neuen Kontext.
Wir sind für alle Erkenntnisse und Verbesserungen des bestehenden Codes dankbar.
Grüße
Justin
Antwort1
Gelöst von Rory @ Ozgrid.com wie unten beschrieben:
Ich habe mir Ihr Arbeitsbuch nicht angesehen, aber die Deklaration Ihrer Sammlung im zweiten Code steht an der falschen Stelle. Diese Zeile:
Dim m_colComboBoxEvents As Collection
muss auf Modulebene erfolgen. Andernfalls wird die Variable gelöscht, sobald Ihre Routine beendet ist, und es sind keine Instanzen Ihrer Klasse mehr vorhanden.