Anzeige
Archiv - Navigation
1720to1724
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Tabulatorreihenfolge auf geschütztem Blatt

Tabulatorreihenfolge auf geschütztem Blatt
15.11.2019 08:12:29
EasyD
Hallo zusammen,
ich habe ein geschütztes Blatt mit einer Reihe ungesperrter Zellen zur Bearbeitung.
Das Blatt ist "aufgeteilt" in 3 Teilbereiche die ich per Klick auf eine Grafik ansteuere (ganz links der erste Bereich, Klick auf Grafik springt weiter nach rechts in den zweiten Bereich usw). Das ganze ist quasi ein 3-teiliges Erfassungsformular, nur einer der Bereiche soll immer sichtbar sein.
Jetzt will ich die Zellen zur Bearbeitung mit der Tabulatortaste vernünftig bedienen können.
Der unten stehende Code läuft wie gewünscht, hat aber eine Schwäche.
Wenn ich die Tabulatorreihenfolge für einen Bereich nicht bis zum Ende durchklicke, dann aber schon auf die Grafik klicke um in einen anderen Bereich zu springen, wird der Tabstopp (intIndex) nicht wieder auf 0 gesetzt damit die Reihenfolge bei der ersten Zelle des neu ausgewählten Bereiches wieder los geht. Stattdessen springt er bei Tabulator dann gleich zu der nächsten Stelle - Bsp - wenn ich den ersten Bereich bis zur Stelle 9 durch gegangen bin, dann in den zweiten Bereich wechsele, macht er bei Stelle 10 weiter - ich möchte aber natürlich die erste....
Den Wert in Sheets("Datenerfassung").Range("S50") ändere ich jeweils ebenfalls bei klick auf die Grafik, damit TabOrder weiß in welchem Bereich wir uns befinden.
Und ganz verzwickt wird es dadurch, dass die Anzahl der Zellen in den 3 Bereichen unterschiedlich ist. Wenn ich bspw im zweiten Bereich schon bei Stelle 30 angekommen bin, hakt sich das natürlich enorm wenn ich in den ersten Bereich wechsele, da der wieder nur 14 Stellen insgesamt hat (also die 31ste Stelle natürlich gar nicht finden kann).
Gibt's Ideen dazu wie ich die Momentan ausgewählte Stelle in diesem array merken kann?
Hinweis:
Im zweiten Bereich ist noch eine Bedingung eingebaut die mir bei Auswahl eines Kontrollkästchens 3 Zellen sperrt oder entsperrt, deshalb ist die Tabulatorreihenfolge für den zweiten Bereich nochmal aufgesplittet, im übrigen aber genauso wie die anderen Bereiche.
In dem Blatt:
Private Sub Worksheet_Activate()
[y7].Select 'erste Stelle im ersten Bereich
Application.OnKey "{TAB}", "TabOrder"
End Sub

In einem Modul:
Option Explicit
Option Base 1
Dim intIndex As Integer
Sub TabOrder()
'Tabulatorreihenfolge in Abhängigkeit vom ausgewählten Eingabebereich
Dim arr
intIndex = intIndex + 1
'Reihenfolge im ersten Bereich
If Sheets("Datenerfassung").Range("S50").Value = 1 Then
arr = Array("y7", "y9", "y11", "y13", "x17", "y19", "x21", "x23", "y25", "ac17", "ad19", "ac21", "ac23", "ad25")
Range(arr(intIndex)).Select
If intIndex = 14 Then intIndex = 0
'Reihenfolge im zweiten Bereich, ohne gesperrte
ElseIf Sheets("Datenerfassung").Range("S50").Value = 2 Then
arr = Array("al9", "al11", "aq9", "aq11", "al17", "al19", "al21", "al26", "am26", "an26", "aq26", "as26", "al27", "am27", "an27", "aq27", "as27", "al28", "am28", "an28", "aq28", "as28", "al29", "am29", "an29", "aq29", "as29", "al30", "am30", "an30", "aq30", "as30")
Range(arr(intIndex)).Select
If intIndex = 32 Then intIndex = 0
'Reihenfolge im zweiten Bereich, alle Zellen
ElseIf Sheets("Datenerfassung").Range("S50").Value = 3 Then
arr = Array("al9", "al11", "aq9", "aq11", "al17", "al19", "al21", "aq17", "aq19", "aq21", "al26", "am26", "an26", "aq26", "as26", "al27", "am27", "an27", "aq27", "as27", "al28", "am28", "an28", "aq28", "as28", "al29", "am29", "an29", "aq29", "as29", "al30", "am30", "an30", "aq30", "as30")
Range(arr(intIndex)).Select
If intIndex = 35 Then intIndex = 0
'Reihenfolge im dritten Bereich
ElseIf Sheets("Datenerfassung").Range("S50").Value = 4 Then
arr = Array("bb9", "bb11", "bb13", "bb15", "bb17", "bb19", "bb21", "bb23", "bb25", "bf9", "bf11", "bf14", "bg25")
Range(arr(intIndex)).Select
If intIndex = 13 Then intIndex = 0
End If
End Sub
und das hier ist der Klick auf die Grafik am Bsp für den zweiten Bereich, die anderen sind entsprechend
Sub Sprung_Bereich2()
Application.ScreenUpdating = False
ActiveSheet.ScrollArea = ""
Call Protect_off
If ActiveSheet.Shapes("Kontrollkästchen_AE").DrawingObject.Value = 1 Then
'Kenner setzen als Markierung für den ausgewählten Bereich
'Bei Bereich 1 und 3 gibt's direkt den Wert 1 oder 4 ohne Abfrage eines Kontrollkästchens
ActiveSheet.Range("S50").Value = 2
Else
ActiveSheet.Range("S50").Value = 3
End If
Dim Zeile As Long, Spalte As Long
Zeile = 5
Spalte = 35
With ActiveWindow
.ScrollColumn = Spalte
.ScrollRow = Zeile
End With
ActiveSheet.ScrollArea = "AI1:AT34"
Call Protect_on
Range("AL9").Select 'erste Zelle des Bereiches auswählen
Application.ScreenUpdating = True
End Sub

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabulatorreihenfolge auf geschütztem Blatt
15.11.2019 10:47:04
Werner
Hallo,
du könntest deine Variable intIndex in einem Modul, außerhalb einer Prozedur, als Public deklarieren. So steht die Variable Projektweit zur Verfügung.
Public intIndex As Integer

Dann kannst du die Variable intIndex in deinem Makro für den Bereichswechsel auf 0 setzen.
Gruß Werner
AW: Tabulatorreihenfolge auf geschütztem Blatt
15.11.2019 11:02:47
EasyD
ok werner,
erstmal vielen Dank.
die variable als public deklarieren... ich glaube den Hintergrund dazu verstehe ich schon, es hapert an der Umsetzung.
darf das alles im gleichen Modul stattfinden?
also sowohl TabOrder, als auch Sprung_Bereich1 2 und 3 und die Deklaration als Public?
Jedenfalls hab ich das jetzt so, jetzt funzt die Reihenfolge nicht mehr...
Anzeige
AW: Tabulatorreihenfolge auf geschütztem Blatt
15.11.2019 11:07:49
EasyD
Quatsch!
Vergiss es wieder!
hab vergessen dass ich erstmal das worksheet_activate ausführen muss um TabOrder zum laufen zu bringen....
läuft wie geschmiert!
besten Dank!
Gerne u. Danke für die Rückmeldung. o.w.T.
15.11.2019 12:31:28
Werner

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige