Tab 和向右箭头更新上方的行

Tab and right arrow update row above

正在处理一个工作表,该工作表根据用户在 A 列中的输入为本地化时间加上时间戳。如果输入输入并使用“输入”或“向下箭头”移动到下一个单元格或下面的单元格。如果使用“TAB”或“向右箭头”转到右侧的下一个单元格,它会更新当前行上方行中的日期和时间。这是代码:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim rWatchRange As Range
On Error GoTo ResetEvents
 
'Set range variable to A1:A1000
 Set rWatchRange = Range("A1:A1000")
 
    Dim Test As Double
    Test = LocalOffsetFromGMT()
    Dim first As Integer    'holds number of the first row selected
    Dim last As Integer     'holds number of the last row selected
    
    'assignments to first and last based on user cell selection
    first = Selection.Cells(1, 1).Row
    last = Selection.Cells(0, Selection.Columns.Count).Row
  
 
    'The cell they have changed (Target) _
     is within A1:A1000
    
    Select Case Target.Value

   Case "IP"
   'sets the Actual Start datetime value in columns E and F
           ActiveSheet.Range("E" & last) = Format((Now() + GetCentralOffset / 24), "M/dd/yyyy hh:mm:ss AM/PM")
           ActiveSheet.Range("F" & last) = Format((Now() + GetCentralOffset / 24), "M/dd/yyyy hh:mm:ss AM/PM")
   
   Case "ip"
   'sets the Actual Start datetime value in columns E and F
           ActiveSheet.Range("E" & last) = Format((Now() + GetCentralOffset / 24), "M/dd/yyyy hh:mm:ss AM/PM")
           ActiveSheet.Range("F" & last) = Format((Now() + GetCentralOffset / 24), "M/dd/yyyy hh:mm:ss AM/PM")
    
   Case "NS"
    'clears Actual Start/End datetime values in columns E, F, G, H
            ActiveSheet.Range("E" & last) = ""
            ActiveSheet.Range("F" & last) = ""
            ActiveSheet.Range("G" & last) = ""
            ActiveSheet.Range("H" & last) = ""
            
    Case "ns"
    'clears Actual Start/End datetime values in columns E, F, G, H
            ActiveSheet.Range("E" & last) = ""
            ActiveSheet.Range("F" & last) = ""
            ActiveSheet.Range("G" & last) = ""
            ActiveSheet.Range("H" & last) = ""
            
 
End Select
 
ResetEvents:
Application.EnableEvents = True
End Sub

关于为什么在使用 TAB 和向右箭头时更新上面的行以及如何让它更新正确的行有什么想法吗?

工作表更改:时间戳

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo ClearError
    
    Const rgAddress As String = "A1:A1000"
    Const tColumns As String = "E:F"
    Const cColumns As String = "E:H"
    
    Dim srg As Range: Set srg = Range(rgAddress)
    Dim irg As Range: Set irg = Intersect(srg, Target)
    
    Dim trg As Range
    Dim crg As Range
    Dim iCell As Range
 
    For Each iCell In irg.Cells
        If StrComp(CStr(iCell.Value), "Ip", vbTextCompare) = 0 Then
            If trg Is Nothing Then
                Set trg = iCell.EntireRow.Columns(tColumns)
            Else
                Set trg = Union(trg, iCell.EntireRow.Columns(tColumns))
            End If
        ElseIf StrComp(CStr(iCell.Value), "Ns", vbTextCompare) = 0 Then
            If crg Is Nothing Then
                Set crg = iCell.EntireRow.Columns(cColumns)
            Else
                Set crg = Union(trg, iCell.EntireRow.Columns(cColumns))
            End If
        'Else ' ???
        End If
    Next iCell
     
    Application.EnableEvents = False
     
    If Not trg Is Nothing Then trg.Value = Format((Now() _
        + GetCentralOffset / 24), "M/dd/yyyy hh:mm:ss AM/PM")
    If Not crg Is Nothing Then crg.ClearContents

SafeExit:
    On Error Resume Next
        If Not Application.EnableEvents Then Application.EnableEvents = True
    On Error GoTo 0
    Exit Sub
ClearError:
    Debug.Print "Run-time error '" & Err.Number & "': " & Err.Description
    Resume SafeExit
End Sub