我如何知道触发 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
我有一个 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