以前活跃的细胞

时间:2013-10-04 11:10:34

标签: excel vba events

对于我正在编写的代码,我监视某些单元格区域中的更改以运行函数和私有子。为此,我使用worksheet_change sub。

中的Intersect函数

然而,交叉'测试'的触发器始终是我“移出”我测试的单元格,无论是通过鼠标点击进入不同的单元格还是通过光标移动。

我需要的是一种定义变量的方法,该变量包含我之前选择的单元格的.address

我尝试了下面的代码,但我得到的只是错误。

有人知道怎么做吗?

Public xfrLastCell As String
Public xfrActiveCell As String

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If xfrActiveCell = "" Then xfrActiveCell = ActiveCell.Address
xfrLastCell = xfrActiveCell
xfrActiveCell = ActiveCell
MsgBox xfrLastCell

End Sub

4 个答案:

答案 0 :(得分:3)

下面的代码对我有用 - 你的activecell分配缺少一个地址,意味着activecell变量总是空白

Option Explicit

Public xfrLastCell As String
Public xfrActiveCell As String

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If xfrActiveCell = "" Then xfrActiveCell = ActiveCell.Address
xfrLastCell = xfrActiveCell
xfrActiveCell = ActiveCell.Address
MsgBox xfrLastCell

End Sub

答案 1 :(得分:2)

使用此代码,引用PreviousActiveCell将返回所需的结果:

Public PreviousActiveCell as Range

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Static pPrevious as Range
    Set PreviousActiveCell = pPrevious
    Set pPrevious = ActiveCell
End Sub

这适用于单个工作表。您是否需要在其他工作表和工作簿中使用以前的单元格?

答案 2 :(得分:1)

可能更容易“记住”范围而不是范围的地址:

Dim Oldcell As Range
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Oldcell Is Nothing Then
        Set Oldcell = Target
        Exit Sub
    End If
    MsgBox "New cell is " & Target.Address & vbCrLf & "Old cell was " & Oldcell.Address
    Set Oldcell = Target
End Sub

答案 3 :(得分:0)

If是不必要的。我用过这个:

Public sPreviousTarget As String
Public sTarget As String

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  sPreviousTarget = sTarget
  sTarget = Target.Address
End Sub

此外,TargetActiveCell不同(ActiveCell是指Target)中的一个单元格。