我怎么知道之前触发了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.Show和Userform Default Instance vs. Userform Explicit Declaration
以上是关于我怎么知道之前触发了SelectionChange过程的行号?的主要内容,如果未能解决你的问题,请参考以下文章
如果与另一个范围相交,则停止触发事件 SelectionChange(已使用相交)?
Angular Mat Select Multiple selectionchange 查找更改了哪个选项