格式化用户形式控件



我正在尝试在每个用户上格式化控制,但我所拥有的格式所有控件在用户表单上,而不仅仅是标签或文本框。

这是我拥有的:

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

这种方法可以做我想要的,但是每个都覆盖了最后一个。无论如何,是否有用户表格描述控件,以免被覆盖?

另外,每次我打开我的用户表单时,我都会遇到"失败"错误。帮助您也将不胜感激!谢谢。

我没有检查,但是"删除内存"错误很可能与在其自己的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

您在所有控件上循环三次,因此每个呼叫都会为所有控件都更改颜色。命名可变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。

最新更新