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

Vba 对于导致类型不匹配的每个循环条件,vba,excel,loops,Vba,Excel,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)

当循环条件包括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已经由脚本确定了


另外,循环中每个变量的cellSkill会发生什么变化?我可以在单元格范围内为每个循环重新使用此变量吗?

使用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

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

,使用Intersect产生了相同的类型不匹配错误。但是,正如我所想,最后一行方法很好。Intersect是否像您所写的那样为您工作?错误的原因可能是什么?我在循环之前使用了
Debug.Print Intersect(skillSheet.Columns(“F”)、skillSheet.UsedRange.Address
,在循环中使用了
Debug.Print cellSkill.Address
。结果都是正确的。