![VBA: ¿cuadro combinado dinámico creado que funciona en un formulario pero no en otro, problema del módulo de clase?](https://rvso.com/image/1628789/VBA%3A%20%C2%BFcuadro%20combinado%20din%C3%A1mico%20creado%20que%20funciona%20en%20un%20formulario%20pero%20no%20en%20otro%2C%20problema%20del%20m%C3%B3dulo%20de%20clase%3F.png)
Hola y gracias por leer: Esta es una publicación cruzada de OZGRID:https://www.ozgrid.com/forum/index.php?thread/1227932-dynamic-created-combo-box-working-on-one-form-but-not-other-class-module-issue/ Todavía no he tenido suerte, actualizaré tan pronto como se resuelva aquí o allá.
Tengo dos formularios con cuadros combinados creados dinámicamente que intentan hacer referencia al mismo módulo de clase.
El primero funciona como se esperaba y no puedo ver el problema con mi código en el nuevo formulario.
El código del módulo Class está aquí:
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
El código del formulario está aquí.
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
Hay un ejemplo llamado test.xlsb si se desplaza por el sitio ozgrid (NB, ha habido un par de intercambios de texto pero nadie ha proporcionado ninguna solución todavía), también hay más detalles allí, pero creo que incluí demasiados. detalle en esa publicación. Por alguna razón la clase no me funciona.
No me importa un enfoque completamente nuevo o una sintaxis alternativa. Simplemente no puedo entender por qué funciona en el contexto original y no en el nuevo contexto.
Se agradecería cualquier información y mejora del código existente.
Saludos
justin
Respuesta1
Resuelto por Rory @ Ozgrid.com como se detalla a continuación:
No he mirado su libro de trabajo, pero la declaración de su colección en el segundo código está en el lugar incorrecto. Esta línea:
Dim m_colComboBoxEvents As Collection
debe estar a nivel de módulo. De lo contrario, tan pronto como finalice su rutina, la variable se borrará y no quedarán instancias de su clase.