Excel / VBA zur vorherigen aktiven Zelle springen?
Hallo,
folgende Logik soll umgesetzt werden:
Wenn Zelle A1 angeklickt wird, dann springe zur letzten aktiven Zelle im aktiven Tabellenblatt.
Habe im Internet "ActiveCell.Previous.Select" diesen Befehl gefunden, jedoch denke ich, dass es nicht dafür ist.
Hat jemand eine Idee wie ich dies umsetzen kann?
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
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
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.
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.
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.