实际上,我需要在某些组合框(UserForm)中实现颜色更改。我创建了一个类和所有需要的代码,但是在“对于F01_MAIN_FORM.Controls中的每个cbbox”行中,我出现了错误13。
类模块代码(名为“颜色”)
Option Explicit
Public WithEvents combo As MSForms.ComboBox
Public Sub Color_Changer()
Select Case combo.Value
Case "Sí"
combo.BackColor = RGB(0, 255, 0)
Case "No"
combo.BackColor = RGB(255, 0, 0)
Case "En curso"
combo.BackColor = RGB(255, 80, 0)
Case "No Aplica"
combo.BackColor = RGB(100, 100, 100)
End Sub
UserForm代码(名为“ F01_MAIN_FORM”)
Option Explicit
Dim Box_Collection As New Collection
Private Sub UserForm_Initialize()
Dim cbbox As MSForms.ComboBox
Dim color_box As Colors
For Each cbbox In F01_MAIN_FORM.Controls
Set color_box = New Colors
Set color_box.combo = cbbox
Box_Collection.Add color_box
Next cbbox
End Sub
通常,此代码需要在需要时更改颜色。 我还需要执行代码以检测组合框何时更改,并自动更改其颜色。
实际上代码显示
错误13
当我尝试阅读该行时
For Each cbbox In F01_MAIN_FORM.Controls
答案 0 :(得分:2)
扩大我对以下问题的评论:
您需要确定循环中的TypeName(cbbox) = "ComboBox"
,dim cbbox as control
。
Dim cbbox as control
for each cbbox in F01_MAIN_FORM.Controls
If TypeName(cbbox) = "ComboBox" Then
Set color_box = New Colors
Set color_box.combo = cbbox
Box_Collection.Add color_box
End if
next cbbox
当您遍历.Controls
时,您正在触摸用户窗体中的所有控件,如果您触摸的不是组合框,则会出现不匹配的情况。这就是为什么要为as control
标注尺寸,然后为找到的每个控件确定typename()
的原因。