调用分配给对象的变量

时间:2016-04-13 12:19:58

标签: excel-vba vba excel

这只是我代码的一小部分:

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文件提供我的代码。

2 个答案:

答案 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