永久更改用户表单

时间:2017-02-24 15:50:37

标签: vba excel-vba userform programmatically permanent

我正在尝试永久更改UserForm,以便我只需运行一次代码,而不是每次单击打开UserForm的按钮时都运行它。

我发现这适用于某些人。我不确定我的错误。

Sub FormatUserForms(UF As UserForm)

UF.BackColor = RGB(51, 51, 102)
Dim ctrl As Control

With ThisWorkbook.VBProject.VBComponents("UFNewRequest").Designer
    For Each ctrl In UF.Controls
        Select Case TypeName(ctrl)
            Case "Label"
                ctrl.BackColor = RGB(51, 51, 102)
                ctrl.ForeColor = RGB(247, 247, 247)
            Case "CommandButton"
                ctrl.BackColor = RGB(247, 247, 247)
                ctrl.ForeColor = RGB(0, 0, 0)
            Case "TextBox"
                ctrl.BackColor = RGB(247, 247, 247)
                ctrl.ForeColor = RGB(0, 0, 0)
            Case "OptionButton"
                ctrl.BackColor = RGB(51, 51, 102)
                ctrl.ForeColor = RGB(247, 247, 247)
        End Select
    Next
End With
End Sub

Sub formatting()

FormatUserForms UFNewRequest

End Sub

感谢您提供任何帮助!

1 个答案:

答案 0 :(得分:0)

你正在混合两件事。它是使用ThisWorkbook.VBProject.VBComponents("UFNewRequest").Designer对象的正确途径,但您并未使用它。相反,您的代码在作为参数传递的表单上工作 - 这将仅在运行时工作。

Sub FormatUserForm(frm As Object)

Dim d As UserForm
Set d = frm.Designer

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

Dim ctrl As Control
For Each ctrl In d.Controls
    Select Case TypeName(ctrl)
            (...)
    End Select
Next ctrl

End Sub

您可以为项目中的所有表单调用该函数:

Dim f As Object
For Each f In ThisWorkbook.VBProject.VBComponents
    If f.Type = 3 Then
       Call FormatUserForm(f)
    End If
Next f

我想有一种方法可以使用f的早期绑定,但你必须在项目中添加对VBE的引用,我不允许在我的计算机上执行此操作,因此我无法测试。可能还有一个为魔术类型3(=形式)定义的常量