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

标签 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
    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/

相关文章:

swiftui - 获取 ScrollView 元素编号 SwiftUI

ios - 在 iOS 的表格 View 中隐藏单元格的标签

ruby-on-rails - ruby rails : Validate CSV file

c# - 如何使用 C# 优化 Excel 中每一行的循环?

javascript - 如何使用正则表达式来表示 18-99 之间的整数范围?

mysql - 如何选择我的表格的范围

vba - 在 vba 中使用变量选择 Excel 工作表

vba - Excel 中录制的宏在运行时失败

python - 我想打印以奇数或偶数作为索引的字母(字符串)并将它们保存为列表

arrays - MATLAB:使用文本扫描并转换矩阵中的元胞数组