Brauche einen Excel Makro zum wechseln von Tabellen?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
If Not Intersect(Target, Range("A1:A100")) Is Nothing Then
  Sheets(Left(Target.Value, 3)).Activate
End If
End Sub

Wobei ich mit A1:A100 den Bereich eingegrenzt habe. Ganz offen lassen würde ich das nicht. Wenn doch gewollt, einfach die zweite und vierte Zeile weglassen.

Woher ich das weiß:Berufserfahrung – IT-Administrator (i.R.)
Oubyi, UserMod Light  21.11.2020, 16:03

Etwas erweitert:

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
If Not Intersect(Target, Range("A1:A100")) Is Nothing Then
  On Error GoTo ErrorHandler
  Sheets(Left(Target.Value, 3)).Activate
  Exit Sub
ErrorHandler: MsgBox "Kein passendes Blatt gefunden"
End If
End Sub
3
abdun 
Fragesteller
 22.11.2020, 11:12
@Oubyi, UserMod Light

Ich sage mal ein riesen DANKESCHÖN!

Super. Klappt wunderbar, danke für deine schnelle Hilfe.

Eine kleine Bitte hätte ich noch ohne deine Zeit rauben zu wollen. Undzwar hätte es für mich einen ziemlich großen Lerneffekt, wenn du die Zeilen kommentieren würdest, sodass man alles nachvollziehen kann. Somit könnte ich später falls nötig auch eigene Anpassungen leichter realisieren.

Erklärungsbedarf gibt es bei Zeile 1,2 und 4. Der Rest ist klar.

0
Oubyi, UserMod Light  22.11.2020, 13:29
@abdun
If Not Intersect(Target, Range("A1:A100")) Is Nothing Then

Das ist quasi die Standard-Zeile um in einem Ereignismakro den Bereich zu beschränken, auf den es angewendet wird. Die doppelte Verneinung macht dabei Sinn, warum kann ich nicht wirklich erklären. Der Befehl lautet in etwa:

"Wenn das Ziel (Target, also die Zelle, die gerade selektiert wurde) und die angegebene Range übereinstimmen (Intersect), das Ziel also in dem Bereich liegt, dann mache etwas."
Konkret wird das umgesetzt mit: Wenn die Übereinstimmung von Ziel und Bereich NICHT NICHTS ist (not nothing), dann ...

  On Error GoTo ErrorHandler

ist eine Sprungmarke, die den Fehler abfängt, wenn ich - in der nächsten Zeile - versuche, ein Blatt zu öffnen, das es nicht gibt. Dann springe ich zur Marke ErrorHandler: (Als Marke erkennbar am Doppelpunkt) und gebe die Meldung aus.

Exit Sub

Damit bewirke ich, das, wenn das Blatt geöffnet wurde, die ganze Prozedur abgebrochen wird. Praktisch springt der Code dann nach End Sub.
Das muss sein, weil sonst als nächstes die Fehlermeldung ausgegeben würde, auch wenn das Blatt gefunden und geöffnet wurde.

1
abdun 
Fragesteller
 23.11.2020, 11:14
@Oubyi, UserMod Light

Vielen Dank für deine ausführliche Antwort.
Jedoch hatte ich beim Zählen der Zeilen ganz oben angefangen.
Also:

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
If Not Intersect(Target, Range("A1:A100")) Is Nothing Then
 
  Sheets(Left(Target.Value, 3)).Activate
0
Oubyi, UserMod Light  23.11.2020, 12:45
@abdun

Das verwirrt mich Jetzt, dann die erste Zeile kam doch von Dir!? Egal.

Die erste Zeile wird von Excel so vorgegeben, wenn man ein Ereignismakro startet, das auf die Auswahl einer Zelle reagieren soll (Oben im Editor von "Allgemein" auf "Worksheet" wechseln --> Selection Change (rechts daneben, wird meist automatisch ausgewählt, da kannst Du aber auch andere Ereignisse vorgeben).
DAS reagiert dann, sobald eine Zelle ausgewählt wird und erstellt automatisch die Variable "Target", die die Adresse der ausgewählten Zelle zurückgibt.

Die zweite hatte ich bereist erklärt.

  Sheets(Left(Target.Value, 3)).Activate

"Sagt": Nimm die 3 Zeichen, die in Target, also der ausgewählten Zelle, am Anfang (links) stehen und nutze sie als Namen eines Blattes und aktiviere dieses Blatt.
Hieße in Deinem Beispiel halt: Nimm von  "AAA_Tabelle1" die "AAA" und aktiviere das Blatt AAA.

1
abdun 
Fragesteller
 23.11.2020, 13:15
@Oubyi, UserMod Light

Vielen DANK! :)

Das mit Zeile eins sollte dich nicht verwirren.
Denn ich habe dies zwar aus dem Netz genommen jedoch nicht verstanden gehabt. Dazu noch kam zwischen "As" und "Range" noch ein "Excel" hinzu. Daher war ich allgemein auf eine Erklärung angewiesen.
Danke nochmal

1
Oubyi, UserMod Light  23.11.2020, 13:22
@abdun

Stimmt, das "Excel." war mir gar nicht aufgefallen. Ist nicht Standard, aber scheint auch nicht zu stören. War mir noch nicht untergekommen.

1
abdun 
Fragesteller
 02.03.2021, 11:13
@Oubyi, UserMod Light

Vielen Dank nochmal für den Code. Klappt alles nach wie vor 1A! Nur bräuchte ich eine kleine Änderung welches ich leider nicht hinbekomme :(

  Sheets(Left(Target.Value, 3)).Activate

Die oben stehende Zeile soll so angepasst werden, dass in dem geöffneten Sheet dann immer die Zelle A1 ausgewählt ist.

0
Oubyi, UserMod Light  02.03.2021, 12:44
@abdun

Das musst Du anhängen:

Sheets(Left(Target.Value, 3)).Activate 

ActiveSheet.Range("A1").Select

1
abdun 
Fragesteller
 02.03.2021, 14:15
@Oubyi, UserMod Light

Danke für den Versuch. Leider geht es nicht. Da kommt immer die MsgBox ""Kein passendes Blatt gefunden!" da anscheinend die Zelle A1 nicht ausgewählt wird.

0
abdun 
Fragesteller
 02.03.2021, 14:29
@Oubyi, UserMod Light

Sorry, muss mich entschuldigen. Der Code funktioniert doch. Ich habe es aus Versehen im falschen Sheet geschrieben.

1

Es gibt ja schon ein paar Antworten.
Springen auf eine gewünschte Seite geht aber auch mit Hyperlinks.
Sind es nicht zu viele Seiten, die erreicht werden müssen, können diese Links eine Art Index zur Navigation in dem Excel Workbook bilden.
So kommt man recht schnell hin und her ohne Makro. Je Unterseite könnte einen Link zurück zum Index haben.
===
Meine VBA Lösung sieht beim Öffnen des WB alle Seiten in eine Liste zu geben und diese als DropDown auswählbar zu halten. Dann muss man gar nichts tippen, sondern klappt nur auf und wählt.

abdun 
Fragesteller
 22.11.2020, 10:51

Danke für deine Antwort.
Folgendes Problem herrscht bei Hyperlinks:

Beim Wechsel auf ein anderes Tabellenblatt möchte ich keine spezielle Zelle definieren, sondern die letzte angeklickte Zelle einfach beibehalten. Über die normale "Link" Funktion von Excel, muss leider immer eine Zelle mitgewählt werden.

1
IchMalWiederXY  22.11.2020, 11:26
@abdun

Stimmt. Dieser Nachteil besteht. Dann hoffe ich dass die vorgeschlagenen VBA Lösungen fruchten.

1

Wie wäre es denn wenn du dir ein Signalwort ausdenkst und dann dahinter das Ziel schreibst? Also z.B. "Sht_AAA"

Das erkennst du dann mit

If left(Traget.value,4) = "Sht_" then
  sheets(Replace(target.value,"Sht_","").activate
End if