Excel / VBA zur vorherigen aktiven Zelle springen?

1 Antwort

Solange sich alles auf einem einzigen Arbeitsblatt abspielt, kannst du es mit diesem Code machen. Der Code soll direkt in das Arbeitsblatt, nicht in ein separates Modul:

Public PreviousCell As Range, CurrentCell As Range

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

 If Target.Address = Range("A1").Address Then

   If Not ((PreviousCell Is Nothing) Or (PreviousCell.Address = Range("A1").Address)) Then

     PreviousCell.Select

   End If

 Else

   Set PreviousCell = CurrentCell

   Set CurrentCell = Target

 End If

End Sub


verreisterNutzer  23.01.2021, 18:39

Also immer wenn sich die Auswahl ändert, die aktuelle und die vorher ausgewählte Zelle in diesen beiden „public“ Variablen speichern.

Wenn dann einmal Range(„A1“) ausgewählt ist, springt man zu der vorletzten Position zurück und speichert nichts weiter ab.

Aber wenn die Zielposition auch Zelle A1 ist, machen wir mal lieber gar nichts, sonst gibt es noch eine Endlosschleife. A1 ist dann nur, um das Zurückspringen auszulösen.

0
abdun 
Fragesteller
 25.01.2021, 16:24

Super klappt ganz gut. Nur eine Sache passt da noch nicht.

Und zwar wenn ich auf die Zelle A1 klicke springt er zurück. Soweit passt alles. Nun wenn ich ohne eine andere Zelle anzuklicken nochmal auf A1 klicke, dann springt er zur vorherigen Zelle von der vorherigen Zelle.

Also klicke ich dauernd auf A1 wechselt er ständig zwischen den beiden letzten Zellen. Kann man es aber so einstellen, dass er immer wieder zur letzten Zelle springt?

Also z.B. Zelle K4 ist selektiert. Klicke ich auf A1 --> springe zu K4. Klicke ich erneut auf A1--> springe erneut zu K4 usw....

Danke im Voraus.

0
verreisterNutzer  25.01.2021, 17:54
@abdun

Du kannst es so einrichten, dass der Ruecksprung selbst nicht registriert wird also nicht mitzaehlt. Dazu setze ich die Variable "Skip" auf "true". Die Bedingung zum Speichern der aktuellen und vorigen Zelle wird dann uebersprungen, aber "Skip" auf "false" gesetzt, damit es nur einmal uebersprungen wird.

Wenn du es noch anders meinst, kannst du die Werte fuer Previous Cell und Current Cell so setzen wie gewuenscht, statt zu ueberspringen. Also nach dem Befehl "Skip =false".

Wir habe nichts initialisiert aber "Skip" ist am Anfang automatisch "false" und die beiden Ranges sind "Nothing". Sollte also passen.

Public PreviousCell As Range, CurrentCell As Range

Public Skip As Boolean

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

 If Target.Address = Range("a1").Address Then

   If Not ((PreviousCell Is Nothing) Or (PreviousCell.Row = 1 And PreviousCell.Column = 1)) Then

     Skip = True

     PreviousCell.Select

   End If

 Else

   If Skip Then

     Skip = False

   Else

     Set PreviousCell = CurrentCell

     Set CurrentCell = Target

   End If

 End If

End Sub

0
abdun 
Fragesteller
 27.01.2021, 15:53
@verreisterNutzer

Ich finde deine Hilfsbereitschaft "Klasse!".

Jedoch funktioniert es nach wie vor nicht.
Es hat sich nicht viel geändert. Hast du mal deinen Code erprobt?
Klick mal auf eine Zelle dann auf A1. Dann klickst du zwei verschiedene Zellen und dann auf A1, dann drei verschiedene Zellen und dann wieder auf A1 usw.
Du wirst merken, dass dies nicht wie erwartet funktioniert. Es sollte ja immer auf die letzte Zelle zurückgesprungen werden, dies ist jedoch nicht der Fall.

0