Olá e obrigado por ler: Esta é uma postagem cruzada do OZGRID: https://www.ozgrid.com/forum/index.php?thread/1227932-dynamic-created-combo-box-working-on-one -form-but-not-other-class-module-issue/ Ainda não tive sorte, atualizarei assim que resolvido aqui ou ali.
Eu tenho dois formulários com comboboxes criados dinamicamente tentando referenciar o mesmo módulo de classe.
O primeiro funciona conforme o esperado e não consigo ver o problema com meu código no novo formulário.
O código do módulo Class está aqui:
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
O código do formulário está aqui.
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
Há um exemplo chamado test.xlsb se você rolar no site ozgrid (observe que houve algumas trocas de texto, mas ninguém forneceu nenhuma solução ainda), também há mais detalhes lá, mas acho que incluí muito detalhe nesse post. por algum motivo, a classe não está funcionando para mim.
Não me importo com uma abordagem completamente nova ou uma sintaxe alternativa. Eu simplesmente não consigo descobrir por que funciona no contexto original e não no novo contexto
Qualquer insight e melhoria no código existente seriam apreciados.
Cumprimentos
Justin
Resolvido por Rory @ Ozgrid.com conforme detalhado abaixo:
Não olhei sua pasta de trabalho, mas a declaração de sua coleção no segundo código está no lugar errado. Está linha:
precisa estar no nível do módulo. Caso contrário, assim que sua rotina terminar, a variável será limpa e não haverá mais instâncias de sua classe.