【问题标题】:Permanently Changing User Forms永久更改用户表单
【发布时间】:2017-02-24 15:50:36
【问题描述】:

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

我发现这对某些人有用。我不确定我可能出了什么问题。

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

感谢您对此的任何帮助!

【问题讨论】:

  • 那么,问题是什么?
  • 顺便说一句,如果该代码在表单的代码隐藏中,请删除 UF 参数并改用 Me as you were told yesterdayFormatUserForms UFNewRequest 正在发送默认实例,它不一定是当前正在执行的实例
  • 只是出于好奇,为什么要更改表单存储的二进制流中的控件属性?动态设置它们为表单加载增加了非常小的开销,并且如果您决定 TextBox 背景颜色需要浅一些阴影,则方式更加灵活和可维护。

标签: vba excel userform programmatically permanent


【解决方案1】:

你混合了两件事。使用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(=forms)定义了一个常量

【讨论】:

  • 我认为这就是我正在寻找的,尤其是能够为我的项目中的所有表单调用该函数的能力,但是 Set d = frm.designer 给了我错误“对象不支持这个属性或方法。”有什么想法吗?
猜你喜欢
  • 2014-08-11
  • 2015-06-21
  • 1970-01-01
  • 1970-01-01
  • 2011-12-31
  • 1970-01-01
  • 1970-01-01
  • 2020-03-16
  • 1970-01-01
相关资源
最近更新 更多