我正在尝试永久更改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
感谢您提供任何帮助!
答案 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(=形式)定义的常量