这只是我代码的一小部分:
If cell1.Offset(0, 8) = "Alpha" Then
Set cell_target = cell2
ElseIf cell1.Offset(0, 8) = "Bravo" Then
Set cell_target = cell3
Else
MsgBox "ERROR"
End
End if
其中cell1只是Sheet1上{for myRange
中for ... next循环内的一个单元格,cell2和cell3只是位于Sheet2和Sheet3上的单个单元格(范围" A2")。
在我的代码结束时,我想将cell2或cell3(取决于上面代码中的cell_target
)向下移动一行,我在下面的代码行中执行此操作:
If cell_target = cell2 Then
Set cell2 = cell2.Offset(1)
ElseIf cell_target = cell3 Then
Set cell3 = cell3.Offset(1)
Else
MsgBox "ERROR"
End
End if
问题是所有细胞都被视为细胞2,即使它们不是。我写过:
解决了这个问题If cell1.Offset(0, 8) = "Alpha" Then
Set cell2 = cell2.Offset(1)
ElseIf cell1.Offset(0, 8) = "Bravo" Then
Set cell3 = cell3.Offset(1)
Else
MsgBox "ERROR"
End
End if
我只是好奇为什么第一种方法不起作用。我个人的猜测是,通过键入cell_target = cell2
,代码没有检查引用名称(cell2或cell3)(这是我需要的),但cell2
是否是对象;从那以后,所有的细胞最终被当作细胞2对待。
如果您能够证实我的理解或反驳并为我澄清这个问题,我将不胜感激。如果我的描述太模糊,我可以在这里或通过Excel文件提供我的代码。
答案 0 :(得分:3)
根据之前的评论,您的测试仅检查值是否相同,而不是它们是否是相同的单元格。
您可以测试.Address(External:=True)
属性或使用:
If cell_target Is cell2 Then
关于具有范围的Is
运算符的小注释:它将在此处起作用,因为您直接将一个范围变量分配给另一个。但是,如果您已将Range(“A1”)分配给两个变量,则Is
运算符会在您比较它们时返回False
,因为Range属性每次都会返回一个新的引用。
答案 1 :(得分:0)
如已评论,您的测试会比较单元格内容。
我建议检查
Interect(cell_target,cell2).Cells.Count>0