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
的任何其他单元格。因此,如果CellB1
=“Sid”和CellF1
=“Sid”,并选择CellF1
,则会出现“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
,并且不能同时比较多个值?我的理解正确吗?我想我会补充一点,以避免混淆。。。等一下。。。更新帖子。非常感谢你们两位,不知道该归功于谁,因为你们都很有帮助。既然希德提供了更多的信息,我就把这归功于他,但我确实给你们两个都打了分。这解释了这么多,我意识到我已经做了很长一段时间的错误。看起来我有一些电子表格需要检查和更正,即使它们确实有效。