For the code I am writing I monitor the changes in certain cell ranges to run functions and private subs. For this I use the Intersect function in the worksheet_change
With this code, referring PreviousActiveCell
will return desired result:
Public PreviousActiveCell as Range
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Static pPrevious as Range
Set PreviousActiveCell = pPrevious
Set pPrevious = ActiveCell
End Sub
This works inside single worksheet. Do you need a previous cell across other sheets and workbooks?
If
is unnecessary. I have used this:
Public sPreviousTarget As String
Public sTarget As String
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
sPreviousTarget = sTarget
sTarget = Target.Address
End Sub
Also, Target
is different from ActiveCell
(ActiveCell
refers to one of the cells in Target
).
below code works for me - your assignment of activecell was missing an Address meaning activecell variable is always blank
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
It might be easier to "remember" the Range rather than the address of the range:
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