【问题标题】:Creating an userform object hierarchy with grouping in vba在 vba 中使用分组创建用户表单对象层次结构
【发布时间】:2014-09-24 18:44:20
【问题描述】:

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

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

我很确定我需要使用多个类来做我想做的事,但对使用类模块还是很陌生。虽然我明白了这个概念。

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

我能够创建标签组并按照我的意愿一起更改它们:

CPart(课程模块 1): *这是为了处理标签的事件触发,包括一些颜色代码,我用来测试组一起改变的功能和改变颜色的功能。 Public WithEvents 触发 As 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): *这需要一组标签,这些标签通过用户表单中的一个集合变量传入,然后将每个标签作为触发器存储在一个单独的类变量中,以及该组中的整个标签集合。这样,当任何触发器触发事件​​时,所有标签都会更改。

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

【问题讨论】:

  • 我使用类的一大原因是设置背景类模块,这样更多的初学者可以通过普通模块并更改添加到哪些组的标签。此外,一旦设置了类,我就可以对使用相同类的其他项目重复此过程。

标签: vba class module labels userform


【解决方案1】:

我只是在看一些类似但不太详细的东西。我试图通过使其看起来更现代来改善复杂用户窗体的外观,并且将尝试伪造 mouseOver 突出显示或至少为放置在图形按钮上方的标签的活动/非活动阴影。

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

这样当你将它们传递给一个子来改变它们的颜色时,你可以检查前缀或后缀。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-22
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-27
    • 2019-09-09
    相关资源
    最近更新 更多