格式化用户表单控件

Formatting User Form Controls

我试图以类似的方式格式化我的每个用户表单上的控件,但我所拥有的是格式化用户表单上的所有控件,而不仅仅是标签或文本框。

这是我的资料:

Private Sub UserForm_Initialize()

FormatUserForms UFNewRequest

End Sub

Sub FormatUserForms(UF As UserForm)

UF.BackColor = RGB(51, 51, 102)

For Each Label In UF.Controls
    Label.BackColor = RGB(51, 51, 102)
    Label.ForeColor = RGB(247, 247, 247)
Next

For Each Button In UF.Controls
    Button.BackColor = RGB(247, 247, 247)
    Button.ForeColor = RGB(0, 0, 0)
Next

For Each TextBox In UF.Controls
    TextBox.BackColor = RGB(247, 247, 247)
    TextBox.ForeColor = RGB(0, 0, 0)
Next

End Sub

这就是我想要的,但是每个 For Each 都会覆盖最后一个。有没有办法在用户表单中描述控件,以免它们被覆盖?

此外,每次我打开然后关闭我的用户表单时,我都会收到 "out of memory" 错误。也将不胜感激!谢谢

我没有检查,但 "out of memory" 错误很可能与在其自己的 Initialize 过程中使用 UserForm 的默认实例有关:

FormatUserForms UFNewRequest

你不应该那样做(也不需要)。您始终可以使用 Me 在其代码隐藏中获取对表单的引用。我会完全删除它。至于控件,您可以调用 TypeName 来确定它是什么类型的控件,然后使用 Select Case 相应地格式化它们:

Private Sub UserForm_Initialize()
    FormatUserForms
End Sub

Sub FormatUserForms()
    Me.BackColor = RGB(51, 51, 102)
    Dim current As Control

    For Each current In Me.Controls
        Select Case TypeName(current)
            Case "Label"
                current.BackColor = RGB(51, 51, 102)
                current.ForeColor = RGB(247, 247, 247)
            Case "CommandButton"
                current.BackColor = RGB(247, 247, 247)
                current.ForeColor = RGB(0, 0, 0)
            Case "TextBox"
                current.BackColor = RGB(247, 247, 247)
                current.ForeColor = RGB(0, 0, 0)
    Next
End Sub

您在所有控件上循环了 3 次,因此每次调用都会更改所有控件的颜色。命名变量 Textbox 不会仅过滤文本框的控件。 您必须使用 TypeName(ctrl):

来分隔控件类型
For Each ctrl In u.Controls
    If TypeName(ctrl) = "TextBox" Then
        ctrl.BackColor = ...
    ElseIf TypeName(ctrl) = "Label" Then
        ctrl.BackColor = ...
    Else
        ...
    End If
next ctrl

据我所知,这仅在表单打开时有效,因此请将对函数的调用放入 UserForm_Initialize-Event。