Excel VBA, 将鼠标移动到不同的单元格

Excel VBA, move mouse to different cell

在Col A中,如果A3 = No,鼠标光标移动到F3,就可以了。 在A列,如果A4 = No,鼠标光标移动到F4等等。

我似乎无法找出正确的代码或如何正确编写代码。

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(False, False) <> "A3" Then Exit Sub
Application.EnableEvents = False
If Target.Value = "No" Then
    Range("F3").Select
End If
Application.EnableEvents = True
End Sub

到目前为止,这就是我让它在一个单元格中工作的原因。

检查 Target 是否在 A 列中,如果是,则移动到 F 列中的同一行:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Intersect(Target, Me.Range("A:A")) Is Nothing Then Exit Sub
    If Target.CountLarge > 1 Then Exit Sub

    If Target.Value = "No" Then
       On Error GoTo SafeExit
       Application.EnableEvents = False
       Me.Range("F" & Target.Row).Select
    End If

SafeExit:
    Application.EnableEvents = True
End Sub

请注意,.Select-ing 不会导致更改事件重新触发,因此如果您有不想执行的 SelectionChange 事件处理程序,则只需禁用事件.

工作表更改:有条件地偏移

Private Sub Worksheet_Change(ByVal Target As Range)
    
    Const FirstCellAddress As String = "A3"
    Const ColumnOffset As Long = 5
    Const Criteria As String = "No"
 
    Dim irg As Range
    With Range(FirstCellAddress)
        Set irg = Intersect(.Resize(Rows.Count - .Row + 1), Target)
    End With
    
    If irg Is Nothing Then Exit Sub

    Dim arg As Range, cCell As Range
    Dim a As Long, c As Long
    
    For a = irg.Areas.Count To 1 Step -1
        Set arg = irg.Areas(a)
        For c = arg.Cells.Count To 1 Step -1
            Set cCell = arg.Cells(c)
            If StrComp(CStr(cCell.Value), Criteria, vbTextCompare) = 0 Then
                cCell.Offset(, ColumnOffset).Select
                Exit For
            End If
        Next c
    Next a
    
End Sub