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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我怎么知道之前触发了SelectionChange过程的行号?相关的知识,希望对你有一定的参考价值。

我有一个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
答案

我会那样做

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

以上是关于我怎么知道之前触发了SelectionChange过程的行号?的主要内容,如果未能解决你的问题,请参考以下文章

如果与另一个范围相交,则停止触发事件 SelectionChange(已使用相交)?

Angular Mat Select Multiple selectionchange 查找更改了哪个选项

宏的初体验

我如何防止剑道下拉列表在角度 4+ 中更改 valueChange 或 selectionChange 事件的值

Vue + ElementUI 实现批量删除功能

Mysql 触发器在循环前声明