Hallo Susanne,
als ich die Tabelle nochmal ausprobiert habe, kam nach einem
doppel Klick die Box Zelle ist gesperrt blabla.
kann ich nicht nachstellen.
Das Problem
mit einem klick auf die gesperrte Zelle bleibt aber der Cursor
wandert in die Zelle D1, er soll wenn möglich in die nächste
freie Zelle springen und/oder gesperrte Zellen überspringen.
http://www.file-upload.net/download-7138863/Testtabe…
In der Prozedur Workbook_SheetSelectionChange hast du die Zeile:
Sh.Cells(xlCellTypeBlanks).Cells(1).Select
daher kommt das mit D1.
Sh ist Tabelle1
.Cells(xlCellTypeBlanks) ist in Sh die vierte Zelle also D1.
Diese Zeile ist gleichwertig:
.Cells(4)
Aus diesem „Zellbereich“ D1:smiley:1 nimmst du jetzt die erste Zelle mit
.cells(1)
ergo D1.
Besser wäre diese Zeile:
Sh.Cells.SpecialCells(xlCellTypeBlanks).Cells(1).Select
Sh.Cells.SpecialCells(xlCellTypeBlanks)
Das stellt in Sh.Cells alle leeren Zellen dar. Mit .Cells(1)
beziehst du dich auf die erste Zelle in der Liste der leeren Zellen.
Das ist schon eher das was du willst.
Ich habe das nun verbessert, man/frau arbeitet ja in Excel von links
nach rechts und oben nach unten. Im nachfolgenden Code wird nicht mehr
nach D1 gehüpft sondern in die erste leere Zelle deren Adresse größer
ist als die mit der Maus angeklickte.
Specialcells hat eine eigenwillige Reihenfolge in solchen „Listen“.
Mach das Hochkomma vor
MsgBox Sh.Cells.SpecialCells(xlCellTypeBlanks).Address
weg, dann siehst du wenn du genau in de Msgbox schaust nach welcher
Logik/Reihenfolge Excel prüft welche Zelladresse in der Msgbox
größer als die angeklickte Zelle ist.
Sag Beschedid wenn du eine andere Reihenfolge willst.
Beispiel, du hast C4 angeklickt. C4 ist nicht leer.
Dann kann man das so machen daß erst in Zeile 5 bis R5
geprüft wird ob da eine leere Zelle ist.
Wenn nicht wird A6:R6 geprüft, dann A7:R7 usw.
Übrigens, du hattest mal bis rechts zu Spalte S was stehen.
Ich habe Spalten S:IV gelöscht.
Sonst wäre S1 die Zelle die wie D1 immer angehüpft wird.
Also markiere auch S:IV, Rechtsklick, Zellen löschen.
Gruß
Reinhard
Private Sub Workbook\_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim Zelle As Range, Zei As Long, Spa As Long
Select Case Sh.Name
Case "Tabelle1"
If Not IsEmpty(Target) Then
Application.EnableEvents = False
For Each Zelle In Sh.Cells.SpecialCells(xlCellTypeBlanks)
If Zelle.Address(0, 0) \> Target.Address(0, 0) Then
Application.EnableEvents = False
'MsgBox Sh.Cells.SpecialCells(xlCellTypeBlanks).Address
Zelle.Select
Application.EnableEvents = True
Exit Sub
End If
Next Zelle
Application.EnableEvents = True
End If
Case Else
End Select
End Sub