使用vba中的分组创建userform对象层次结构

时间:2014-08-01 14:20:02

标签: vba class module labels userform

首先要做的事情。我真的应该用VB而不是VBA完成我想做的事情。但只要有可能我宁愿使用VBA。

我的用户表格基本上是由数百个标签组成的大图。我想将这些标签分成几组。然后将这些组分成子系统。这个想法是我有一些形式的heirarchy可以使用。标签组需要根据我在组合框中选择的内容来更改颜色,如果我单击其中一个标签,我想打开一个用户表单,显示使用点击事件的子系统的详细信息。

我非常确定我需要使用多个类来做我想要的但是使用类模块相当新。虽然我得到了这个概念。

基本上我想要一些属于子系统的功能 - >标签组(或部分) - >颜色包含整个子系统的单击事件和用于更改标签组颜色的组合框事件。 我在网上看到了一个关于分组标签或文本框的线程,但它只能触发组的偶数,而不是在触发事件后更改整个组的属性。我想在课堂上进行设置,以便我可以导出系统以便在其他未来的用户表单中使用。

我能够创建标签组并按照我想要的方式将它们一起更改:

CPart(课程模块1): *这是为了处理事件触发标签,并包括一些颜色代码,我用来测试组一起更改的功能和更改颜色的功能。 Public WithEvents触发器为MSForms.Label

Dim pLabels As Collection

Property Set triggers(c As Collection)
    Set pLabels = c
End Property

Private Sub trigger_Click()
    For Each obj In pLabels
        obj.BackColor = RGB(255, 0, 0)
    Next obj
End Sub

CTrigger(类模块2): *它采用了一组标签,这些标签通过userform中的集合变量传入,然后将每个标签作为触发器存储在单独的类变量中,以及该组中的整个标签集合。这样,当任何触发器触发事件​​时,所有标签都会发生变化。

Dim CTrigger() As New CPart
Dim pLabels As Collection
Dim i As Integer

Property Set Labels(c As Collection)
    Set pLabels = c
    For i = 1 To pLabels.Count
        ReDim Preserve CTrigger(1 To i)
        Set CTrigger(i).trigger = pLabels.Item(i)
        Set CTrigger(i).triggers = pLabels
    Next i
End Property

Property Get Labels() As Collection
    Labels = pLabels
End Property

我真的不喜欢它的工作方式,部分原因是因为我不断失去自己的逻辑,部分是因为这意味着为了使用它我必须在用户形式中制作标签集合模块无论如何只是为了运行它。这是非常低效的代码,但是我把它放在一边,这样你就可以了解我想要实现的目标。

我更愿意做的是拥有一个类变量来保存我自定义的标签集合(" LabelGroup")。另一个类变量可能需要自己保存标签(我认为)。然后我需要做的就是为LabelGroup类编写方法,例如changecolor,它可以处理它。但是我可以处理那个部分,现在我真正需要帮助的是以一种简洁的方式设置类框架,这样我最终运行的模块可以说如下:

LabelGroup1.Add Label1
LabelGroup2.Add Label2

Private Sub button_click()
    LabelGroup1.ChangeColor(RGB(...))
End Sub

这两篇文章一直在帮助我: http://www.databaseadvisors.com/newsletters/newsletter200503/0503usingcustomcollections/using%20custom%20collections%20in%20microsoft%20access.asp

http://j-walk.com/ss/excel/tips/tip44.htm

1 个答案:

答案 0 :(得分:0)

我只是在看类似但不那么详细的东西。我试图改进复杂用户形态的外观,使它看起来更现代,并试图伪造mouseOver突出显示或至少主动/非活动阴影放置在图形按钮上方的标签。

无论如何,您是否考虑过更改标签对象的名称,以便它们以某种类型的组或子系统ID作为前缀/后缀?

这样当您将它们传递给子以更改其颜色时,您可以检查前缀或后缀。