我如何知道触发 SelectionChange 过程的前一个行号?

How can I know the previous row number that triggered a SelectionChange procedure?

我有一个 Excel spreadsheet,它会在我每次移动活动单元格时调用 SelectionChange 过程。

此过程执行一定数量的操作并在用户窗体中显示结果。用户可以通过命令按钮验证结果或取消。

Selection.row 给我目标单元格的行。

如何检索刚离开的单元格的行号?

下面第一段代码在sheet代码中,第二段是用户窗体代码。此测试用户表单仅包含一个标签和一个按钮。

按钮代码的第一行有效,但给了我目标行。我希望第二行可以工作,但是 OldRow 是空的,所以该行崩溃了。如何让 OldRow 对用户窗体可见?

Dim OldRow As Long

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Static OldRange As Range
    If Not OldRange Is Nothing Then
        ' do things
    End If
    MsgBox OldRow
    UserForm1.Show
    Set OldRange = Target.Cells(1, 1)
    OldRow = OldRange.Row
End Sub
Private Sub CommandButton1_Click()
    UserForm1.Label1.Caption = Selection.Row
    UserForm1.Label1.Caption = OldRow
End Sub

我会那样做

Option Explicit

Dim PrevActiveCell As Range
Dim CurActiveCell As Range
Dim frm As New UserForm1

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Set PrevActiveCell = CurActiveCell
    Set CurActiveCell = ActiveCell

    If PrevActiveCell Is Nothing Then
        ' Either you forget to set CurActiveCell (when opening the workbook or ...)
        ' or you did reset the VBA project
    Else

        With frm
            .Caption = "Cur:" & CurActiveCell.Row & " Old: " & PrevActiveCell.Row
            .Show
        End With

    End If

End Sub

在表格中我有这个代码

Option Explicit

Private Sub CommandButton1_Click()
    Hide
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer _
                                       , CloseMode As Integer)
    ' Prevent the form being unloaded
    If CloseMode = vbFormControlMenu Then Cancel = True

    ' Hide the Userform
    Hide

End Sub

PS 在用户窗体的代码中引用用户窗体本身不是一个好主意。读书materialUserForm1.Show and Userform Default Instance vs. Userform Explicit Declaration