如何在此代码上修复错误13(类型不匹配)?

时间:2019-07-23 13:16:15

标签: excel vba

实际上,我需要在某些组合框(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

1 个答案:

答案 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()的原因。