我正在尝试在每个用户表单上格式化控件,但是我在用户表单上格式化了所有控件,而不仅仅是标签或文本框。
这就是我所拥有的:
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都覆盖了最后一个。反正是否在用户表单中描述控件以便不会覆盖它们?
此外,每次我打开我的用户表单然后关闭我的用户表单时,我会得到一个"内存不足"错误。对此的帮助也将受到赞赏!感谢。
答案 0 :(得分:3)
我没有检查,但“内存不足”错误很可能与在UserForm
过程中使用Initialize
的默认实例有关:
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
答案 1 :(得分:1)
您循环遍历所有控件三次,因此每次调用都会更改所有控件的颜色。命名变量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
- 事件中。