Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1780to1784
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

Tabindex bei verbundenen Zellen

Tabindex bei verbundenen Zellen
21.09.2020 08:29:28
EasyD
Hallo zusammen
ich habe ein geschütztes Blatt zur Datenerfassung mit einigen nicht geschützten Zellen.
mit der Tabulatortaste möchte ich nun in einer vorgegebenen Reihenfolge durch die Zellen springen können.
Das Ganze ist zusätzlich noch abhängig von dem Wert in Zelle S50, den ich durch klick auf 4 verschiedene Grafiken steuere (schreibe Wert 1 bis 4).
Meine Lösung:
(in einem Modul, wird aufgerufen im worksheet_activate)
Sub TabOrder()
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Tabulatorreihenfolge - im ws_activate aufgerufen  _
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
'xxxxxxxxxxxxxxx in der Zelle S50 (Datenerfassung) wird bei Klick auf die Grafiken ein Kenner  _
gesetzt xxxxxxxx
'Tabulatorreihenfolge in Abhängigkeit vom ausgewählten Eingabebereich
Dim arr
intIndex = intIndex + 1
Select Case Sheets("Datenerfassung").Range("S50").Value
'Reihenfolge 1
Case 1
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 2
Case 2
arr = Array("AL9:AM9", "AL11:AM11", "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 3
Case 3
arr = Array("AL9:AM9", "AL11:AM11", "AQ9:AR9", "AQ11:AR11", "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 4
Case 4
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 Select
End Sub
Leider funktioniert das nicht wie gewünscht. Im Verdacht als Problemverursacher hatte ich die verbundenen Zellen, siehe Case 2 und 3, war ursprünglich definiert mit AL9, AL11, .... Hat aber ebenfalls nicht geholfen.
Habt Ihr Ideen dazu? Eine Beispielmappe könnte ich mit etwas Fummelei noch hochladen wenn gewünscht.

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabindex bei verbundenen Zellen
21.09.2020 08:36:29
EasyD
Da fehlte noch was vorab:
Option Explicit
Option Base 1
Public intIndex As Integer
AW: Tabindex bei verbundenen Zellen
21.09.2020 09:06:32
Luschi
Hallo EasyD,
was hast Du denn programmiert, wenn sich der Wert in Zelle 'S50' und vor allem, wodurch ändert sich dieser Wert:
- manuell oder durch 1 Formel
- wenn manuell, dann kann man die Zellen, die nicht geschützt sein sollen, beeinflussen
- das erspart jede Menge selbst programmierte Zugriffskontrolle
Gruß von Luschi
aus klein-Paris
AW: Tabindex bei verbundenen Zellen
21.09.2020 09:23:25
EasyD
Hallo Luschi
auf dem Blatt gibt es 3 Eingabebereiche zur Datenerfassung.
Durch klick auf eine Grafik springe ich in diesen 3 Eingabebereichen hin und her (dafür schränke ich jeweils die scrollarea unterschiedlich ein).
Insgesamt gibt es 3 Grafiken, die 3 unterschiedliche Prozeduren auslösen.
Innerhalb dieser 3 prozeduren ändert der klick gleichzeitig den Wert in Zelle S50, welcher wiederum als Grundlage für die Steuerung der Taborder dient.
(Die prozedur Taborder ist 4-teilig, weil der zweite Eingabebereich aus 2 Teilbereichen besteht, Case 2 und 3 in der Taborder.)
Das ganze sieht am Beispiel des ersten Eingabebereiches so aus, im gleichen Modul wie die Taborder:
Sub Sprung_Grund()
'In der Erfassung zum entsprechenden Eingabebereich springen
Application.ScreenUpdating = False
Call Protect_off
'Kenner setzen als Markierung für den ausgewählten Bereich 1
'steuert die TabOrder
ActiveSheet.Range("S50").Value = 1
'Taborder auf Anfang
intIndex = 0
ActiveSheet.ScrollArea = ""
Dim Zeile As Long, Spalte As Long
Zeile = 5
Spalte = 20
With ActiveWindow
.ScrollColumn = Spalte
.ScrollRow = Zeile
End With
ActiveSheet.ScrollArea = "T1:AE34"
Call Protect_on
Range("Y7").Select
Application.ScreenUpdating = True
End Sub

Anzeige
AW: Tabindex bei verbundenen Zellen
21.09.2020 09:48:19
Luschi
Hallo EasyD,
der Vba-Befehl 'ActiveSheet.Range("S50").Value = 1
- löst das Change-Ereignis der Tabelle aus
- hier kann man abfragen ob die geänderte Zelle 'S50' ist (Application.Intersect)
- und wenn ja, dann die entsprechenden Zellen schützen bzw. freigeben
- und dann muß man sich um die Tab-Taste nicht mehr kümmern
Gruß von Luschi
aus klein-Paris
AW: Tabindex bei verbundenen Zellen
21.09.2020 09:55:33
EasyD
puh
also mit application.intersect abfragen, ob sich S50 geändert hat
das bekomme ich glaube hin
aber was ist das Ergebnis der Prüfung?
Du meinst, wenn ja, dann den Zellschutz aufheben?
Bisher habe ich den Zellschutz für diese Zellen IMMER aufgehoben. Und zwar NUR für diese Zellen. Alles andere auf dem Blatt ist gesperrt.
Würde sich das Problem also erledigen, wenn ich mit dieser Methode immer nur DIE Zellen des gerade gewählten Bereiches frei gegeben habe und sonst keine weiteren Zellen auf dem Blatt?
und wo oder was ist eigentlich "klein-paris" ?
;)
Anzeige
AW: Zur letzten Frage siehe Goethes Faust und ...
22.09.2020 08:15:07
EasyD
Aha... da hab ich schon das ein oder andere Mal gut gegessen ;)
Aber zurück zu meinem Problem.
Ich weiß nicht ob das richtig durch gekommen ist:
Es kommt schon auf die Reihenfolge der anzusteuernden Zellen an.
Du musst Dir vorstellen, dass in den Eingabebereichen die einzelnen Zellen nicht hintereinander liegen und somit blosses Drücken der Tabulatortaste (ohne vorherige Festlegung der Reihenfolge) dazu führen würde, dass die Reihenfolge eine andere ist, als von der Datenerfassungsmaske vorgegeben (Bspw würde ich natürlich bei einer Adresse nicht zuerst die Postleitzahl, dann die Strasse und dann den Ort eingeben wollen).
Deine Anregung hat mich zu folgendem Lösungsansatz gebracht, leider auch noch nicht mit dem gewünüschen Ergebnis. Das Ergebnis jetzt ist lediglich, dass er mir - wenn ich mich bspw im ersten Bereich befinde - beim Drücken der Tabulatortaste nicht mehr rüber in den zweiten Bereich springt sondern einfach in der momentan gewählten Zelle hängen bleibtz:
Sub Sprung_Grund()
Dim LockedCells, FreeCells As Range
Set FreeCells = Range("Y7, Y9, Y11, Y13, X17, Y19, X21, X23, Y25, AC17, AD19, AC21, AC23, AD25") _
Set LockedCells = Range("AL9:AM9, AL11:AM11, AQ9, AQ11, AL17, AL19:AM19, AL21:AM21, AQ17, AQ19: _
AR19, AQ21:AR21, 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")
'In der Erfassung zum entsprechenden Eingabebereich springen
Application.ScreenUpdating = False
Call Protect_off
FreeCells.Locked = False
LockedCells.Locked = True
'Kenner setzen als Markierung für den ausgewählten Bereich Grund
'steuert die TabOrder
ActiveSheet.Range("S50").Value = 1
'Taborder auf Anfang
intIndex = 0
ActiveSheet.ScrollArea = ""
Dim Zeile As Long, Spalte As Long
Zeile = 5
Spalte = 20
With ActiveWindow
.ScrollColumn = Spalte
.ScrollRow = Zeile
End With
ActiveSheet.ScrollArea = "T1:AE34"
Call Protect_on
Range("Y7").Select
Application.ScreenUpdating = True
Set FreeCells, LockedCells = Nothing
End Sub

Anzeige
AW: Zur letzten Frage siehe Goethes Faust und ...
22.09.2020 08:25:35
EasyD
ich glaub ich habe den Übeltäter gerade gefunden.... im ws_activate des Blattes
Private Sub Worksheet_Activate()
'xxxxxxxxxxxxxxxxxx Tabulatorreihenfolge festlegen - Steuerung durch das "Taborder" im  _
Modul_Div xxxxxxxxxxxxxxxxxxxxxxxxxx
[y7].Select
Application.OnKey "{TAB}", "TabOrder"
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Call Protect_off
'.... diverse Anweisungen hier
'xxxxxxxxxxxxxxxx und hier liegt des Bösen Wurzel begraben xxxxxxxxxxxxxx
'Kenner setzen für Beginn des TabOrder im ersten Bereich (Grundangaben)
ActiveSheet.Range("S50").Value = 1
Call TabOrder '-> jetzt frag mich mal wie das hier rein gekommen ist.....
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ActiveSheet.ScrollArea = "A1:AE34"
Call Protect_on
Set CellsE = Nothing: Set CellsF = Nothing: Set CellsG = Nothing
End Sub

Anzeige

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige