对于导致类型不匹配的每个循环条件

时间:2017-06-01 22:51:27

标签: excel vba excel-vba loops

当循环条件包括F列的整个范围时,此代码可以正常工作:

Dim ABnumb As String
Dim cellSkill As Range
Let ABnumb = dayWS.Cells(i1, 2).Value

    For Each cellSkill In skillSheet.Range("F:F")
        If cellSkill.Value = ABnumb Then
            Let skillNumb = cellSkill.Offset(0, -5).Value
            Let skillDelimited = skillDelimited & ";" & skillNumb
        End If
    Next cellSkill

但为了提高效率,我想将循环限制在使用范围内。当我将代码更改为:

For Each cellSkill In skillSheet.UsedRange("F")

我的表达式出现类型不匹配错误:

If cellSkill.Value = ABnumb Then

我玩改变了两个变量'声明的数据类型,但没有任何用处。

有没有办法可以使用.UsedRange(" F")?或者我应该使用.Range(1,lastRow),其中lastRow已经由脚本确定了?

此外,循环中For Each变量cellSkill会发生什么?我是否可以将此变量重复用于另一个For Each循环通过单元格范围而不会出现问题?

1 个答案:

答案 0 :(得分:4)

使用Intersect将列F修剪为工作表的.UsedRange属性。

For Each cellSkill In Intersect(skillSheet.Columns("F"), skillSheet.UsedRange)
    ...
next cellSkill

要解决您的选择,应该是,

with skillSheet
    for each cellSkill in .Range(.cells(1, "F"), .cells(.rows.count, "F").end(xlup))
        ...
    next cellSkill
end with

是的,您可以在以下For .... Next循环中重复使用cellSkill。当您退出最后一个循环时,cellSkill应为Nothing