gpt4 book ai didi

excel - 使用目标来识别小区位置

转载 作者:行者123 更新时间:2023-12-02 15:28:59 26 4
gpt4 key购买 nike

我经常遇到这个问题,并且很好奇是否有人可以告诉我原因或如何将其写得更干净。

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

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

如果目标已经是一个范围,那么为什么我需要指定单独的行和单独的列?第二个代码不起作用,我已经尝试了它的许多变体。我什至尝试了类似 If Target.Range = range(“C4”) thenIf Target.Range = cells(4, 3) Then 的方法,但这些都不起作用任何一个。我尝试了类似东西的许多变体。虽然,我不想使用像 A4 这样的特定范围,因为我想像示例中那样使用 rTime ,但我只是想弄清楚这个出来了。

除了每次指定单独的行和列之外,似乎没有什么作用。有人可以向我解释一下吗?另外,是否有比我在第一个示例中所做的更好的方法来编写此代码,该方法确实有效?

感谢任何能缓解我困惑的事情。

最佳答案

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

L42 已经展示了一种方法。这是使用 Intersect

的另一种方法

如果不相交(Target, rtime.Offset(0, 1)) 就什么都没有,那么 cboStatus.Activate

编辑

当您说 Target.ColumnTarget.Row 时,您将始终获得该范围内单元格的第一列和第一行,即使 目标有多个单元格。为了避免这种情况,请使用以下方法来确保您拥有所需的目标。即使 Target 中只有一个单元格,您的代码也会给您带来意想不到的结果。例如,假设单元格 B1 的值等于当前为 target 的任何其他单元格。因此,如果 Cell B1 = "Sid"且 Cell F1 = "Sid"并且您选择单元格 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

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

关于excel - 使用目标来识别小区位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19900537/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com