对于每个循环条件导致types不匹配

当循环条件包括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") 

我得到这个expression式的types不匹配错误:

 If cellSkill.Value = ABnumb Then 

我玩改变两个variables的声明的数据types,但没有有效的。

有没有一种方法可以使用.UsedRange(“F”)? 还是应该使用.Range(1,lastRow),其中lastRow已经由脚本确定了?

另外,循环中的For EachvariablescellSkill会发生什么? 我可以重复使用这个variables为另一个For Each循环通过单元格范围没有麻烦吗?

使用相交将列F修剪到工作表的.UsedRange属性。

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

为了解决你的select,应该是,

 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