Zuvor aktive Zelle - Excel, VBA, Ereignisse

Für den Code, den ich schreibe, überwache ich die Änderungen in bestimmten Zellenbereichen, um Funktionen und private Subs auszuführen. Dazu benutze ich die Schnittfunktion in der worksheet_change sub.

Der Auslöser für den Schnittpunkt "Test" ist jedoch immer, dass ich aus der Zelle, die ich gerade teste, "herauskomme", ob es per Mausklick in eine andere Zelle oder durch Cursorbewegung geht.

Was ich brauche, ist eine Möglichkeit, eine Variable zu definieren, die das enthält .address von der Zelle, die ich vorher ausgewählt hatte.

Ich habe den folgenden Code ausprobiert, aber alles, was ich bekomme, sind Fehler.

Hat jemand eine Idee, wie man das macht?

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

Antworten:

2 für die Antwort № 1

Der folgende Code funktioniert für mich - Ihre Zuweisung von ActiveCell fehlte eine Address Bedeutung ActiveCell Variable ist immer leer

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 für die Antwort № 2

Mit diesem Code, Bezug nehmend PreviousActiveCell wird das gewünschte Ergebnis zurückgeben:

Public PreviousActiveCell as Range

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

Dies funktioniert in einem einzelnen Arbeitsblatt. Benötigen Sie eine vorherige Zelle in anderen Arbeitsblättern und Arbeitsmappen?


0 für die Antwort № 3

Es ist vielleicht einfacher, sich an den Bereich zu erinnern als an die Adresse des Bereichs:

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

0 für die Antwort № 4

If ist unnötig. Ich habe das benutzt:

Public sPreviousTarget As String
Public sTarget As String

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

Ebenfalls, Target unterscheidet sich von ActiveCell (ActiveCell bezieht sich auf eine der Zellen in Target).