VBA – 动态创建的组合框在一个表单上工作但在其他表单上不工作,类模块问题?

VBA – 动态创建的组合框在一个表单上工作但在其他表单上不工作,类模块问题?

您好,感谢您阅读:这是来自 OZGRID 的一篇转帖:https://www.ozgrid.com/forum/index.php?thread/1227932-dynamic-created-combo-box-working-on-one-form-b​​ut-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

需要处于模块级别。否则,一旦例程完成,变量就会被清除,并且不会剩下任何类的实例。

相关内容