Excel 使用目标识别单元位置

Excel 使用目标识别单元位置,excel,range,cell,target,vba,Excel,Range,Cell,Target,Vba,我遇到了很多这个问题,我很好奇是否有人能告诉我为什么或者如何写得更干净一些 下面是我的代码,它确实有效 If Target.Row = rTime.Offset(0, 1).Row Then If Target.Column = rTime.Offset(0, 1).Column Then cboStatus.Activate End If End If 为什么我不能这样写呢 If Target = rTime.Offset(0, 1) Then cbo

我遇到了很多这个问题,我很好奇是否有人能告诉我为什么或者如何写得更干净一些

下面是我的代码,它确实有效

If Target.Row = rTime.Offset(0, 1).Row Then
    If Target.Column = rTime.Offset(0, 1).Column Then
        cboStatus.Activate
    End If
End If
为什么我不能这样写呢

If Target = rTime.Offset(0, 1) Then
    cboStatus.Activate
End If
如果目标已经是一个范围,那么为什么我需要指定单个行和单个列?第二个代码将不起作用,我已经尝试了它的许多变体。我甚至尝试了类似于
如果Target.Range=Range(“C4”)然后
或者
如果Target.Range=cells(4,3)然后
,但这两种方法都不起作用。我试过很多类似的东西。虽然我不想使用像
A4
这样的特定范围,因为我想像示例中那样使用
rTime
,但我只是想弄清楚这一点

除了每次指定单独的行和列之外,似乎什么都不起作用。有人能给我解释一下吗?还有,有没有比我在第一个例子中所做的更好的方法来写这个呢

感谢您为我提供的一切帮助。试试这个:

Edit1:报道CHI的担忧

If Target.Address = rtime.Offset(0,1).Address(,,,True) then cboStatus.Activate

不能比较对象,只能比较属性?但是我不确定。

范围对象的默认属性是
.Value
,因此当您说
如果Target=rTime.Offset(0,1)
,它将始终比较该范围内的值,而不是这些范围的地址

L42已经显示了一种方法。下面是使用
Intersect

如果不相交(目标,rtime.Offset(0,1))为零,则cboStatus.Activate

编辑

当您说
Target.Column
Target.Row
时,您将始终获得该范围内单元格的第一列和第一行,即使
Target
有多个单元格。要避免这种情况,请使用下面的命令确保您具有所需的
目标。即使
Target
中只有一个单元格,您的代码也会给您意外的结果。例如,假设单元格
B1
的值等于当前为
target
的任何其他单元格。因此,如果Cell
B1
=“Sid”和Cell
F1
=“Sid”,并选择Cell
F1
,则会出现“Hello World”消息框

对于xl2003,您可以使用附加检查

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim rtime As Range

    Set rtime = Range("A1")

    If Target.Cells.Count > 1 Then
        MsgBox "you have chosen more than one cell"
        Exit Sub
    End If

    If Not Intersect(Target, rtime.Offset(0, 1)) Is Nothing Then
        MsgBox "Hello World"
    End If
End Sub
对于xl2007+,将
Target.Cells.Count
替换为
Target.Cells.CountLarge

对于L42


您的方法是正确的,但是您还必须进行上述检查以获得正确的结果。

+1是的,您需要获得
.Address
您应该真正使用
。Address(,.TRUE)
以防
rtime
目标不在同一工作簿和工作表上。为您编辑了我的答案:D,尽管有点晚。@sid我认为只有当对象包含单个单元格时,比较才有效?如果它是一个范围,例如
range(“A1:A2”)
,那么它将不起作用,因为正如您所说,默认属性是
Value
,并且不能同时比较多个值?我的理解正确吗?我想我会补充一点,以避免混淆。。。等一下。。。更新帖子。非常感谢你们两位,不知道该归功于谁,因为你们都很有帮助。既然希德提供了更多的信息,我就把这归功于他,但我确实给你们两个都打了分。这解释了这么多,我意识到我已经做了很长一段时间的错误。看起来我有一些电子表格需要检查和更正,即使它们确实有效。