VBA-为什么向循环中添加集合会导致类型不匹配错误?

VBA-为什么向循环中添加集合会导致类型不匹配错误?,vba,excel,Vba,Excel,我有一个非常长但功能强大的宏来根据可变阈值改变单元格背景颜色。我想,有0%的可能性这是最好的方法,所以我试着把我的一些变量(列编号的变量)放入一个集合中,并循环使用它们。我不会让你经历原著的数百行文字,而是用一个简短的部分来说明: For i = 14 To 43 If Cells(i, rc) = AMER Then If Cells(i, NU_C) <= (Cells(AM_R, NU_C) - pct) Then

我有一个非常长但功能强大的宏来根据可变阈值改变单元格背景颜色。我想,有0%的可能性这是最好的方法,所以我试着把我的一些变量(列编号的变量)放入一个集合中,并循环使用它们。我不会让你经历原著的数百行文字,而是用一个简短的部分来说明:

For i = 14 To 43 

        If Cells(i, rc) = AMER Then

                If Cells(i, NU_C) <= (Cells(AM_R, NU_C) - pct) Then
                    Cells(i, NU_C).Interior.Color = RGB(242, 220, 219)
                Else

                    If Cells(i, NU_C).Interior.Color = RGB(242, 220, 219) Then
                    Cells(i, NU_C).Interior.ColorIndex = 0
                    End If

                End If

                If Cells(i, FW_C) <= (Cells(AM_R, FW_C) - pct) Then
                    Cells(i, FW_C).Interior.Color = RGB(242, 220, 219)
                Else

                    If Cells(i, FW_C).Interior.Color = RGB(242, 220, 219) Then
                    Cells(i, FW_C).Interior.ColorIndex = 0
                    End If

                End If
适用于i=14至43
如果单元格(i,rc)=则

如果单元格(i,NU_C)将字符串追加到集合中,然后在单元格中引用相同的方法

在向集合添加值时

Set C = New Collection
C.Add "NU_C"
C.Add "FW_C"
C.Add "BI_C"
C.Add "B_C"
C.Add "DB_C"
C.Add "TL_C"
将实际值添加为

    Set C = New Collection
    C.Add 9
    C.Add 12
    C.Add 15
    C.Add 18
    C.Add 21
    C.Add 24

希望这能有所帮助-感谢您将字符串文字添加到集合中,而不是添加您想要的变量。你应使用:

Set C = New Collection
C.Add NU_C
C.Add FW_C
C.Add BI_C
C.Add B_C
C.Add DB_C
C.Add TL_C
尽管在这一点上你并不真正需要变量!您还可以使用阵列:

Dim C
C = Array(9, 12, 15, 18, 21, 24)
For each v in C

您的集合包含既不是列号也不是字母的字符串<代码>单元格(i,“NU_C”)
毫无意义。从谷歌上看,集合似乎可以包含VBA对象,我认为这意味着它们可以包含变量。除了收藏,还有什么我应该用的吗?字典?它可以,但您明确添加了字符串。您需要
C。添加不带引号的NU\u C
。在这里,数组的开销要比集合的开销小。它可以工作!非常感谢。我想我认为它需要引号,比如范围(“A1”)需要引号。我也会查看数组。如果你写评论作为答案,我可以给你打勾?谢谢你的回答!我更喜欢保留列名,这样我就不会忘记我以后要做什么,但我感谢你的帮助:)谢谢!!我真的很感谢你的帮助~
    Set C = New Collection
    C.Add 9
    C.Add 12
    C.Add 15
    C.Add 18
    C.Add 21
    C.Add 24
Set C = New Collection
C.Add NU_C
C.Add FW_C
C.Add BI_C
C.Add B_C
C.Add DB_C
C.Add TL_C
Dim C
C = Array(9, 12, 15, 18, 21, 24)
For each v in C