我怎么知道之前触发了SelectionChange过程的行号?

问题描述 投票:0回答:1

我有一个Excel电子表格,每次移动活动单元格时都会调用SelectionChange过程。

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

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

如何获取刚离开的单元格的行号?

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

按钮代码的第一行有效,但给了我目标行。我希望第二行可以工作,但是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
excel vba userform
1个回答
0
投票

我会那样做

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在用户表单的代码中引用用户表单本身不是一个好主意。读取材料UserForm1.ShowUserform Default Instance vs. Userform Explicit Declaration

© www.soinside.com 2019 - 2024. All rights reserved.