Ist es möglich, die ausgewählte Zelle weiter vom unteren Rand des Excel-Bildschirms entfernt zu halten, d. h. automatisch zu scrollen, bevor Sie den unteren Rand erreichen?

Ist es möglich, die ausgewählte Zelle weiter vom unteren Rand des Excel-Bildschirms entfernt zu halten, d. h. automatisch zu scrollen, bevor Sie den unteren Rand erreichen?

Das ist schwer zu erklären. Stellen Sie sich vor, Sie sind in Excel und drücken die Abwärtstaste, um sich in den Zeilen nach unten zu bewegen. Wenn Sie am unteren Bildschirmrand angekommen sind, bewirkt ein erneutes Drücken der Abwärtstaste, dass die Tabelle zeilenweise nach unten gescrollt wird, sodass die ausgewählte Zelle nie außerhalb des sichtbaren Bereichs liegt.

Seltsamerweise möchte ich, dass dieses Verhalten auftritt, wenn ich (sagen wir) 20 Zeilen vom unteren Rand entfernt bin. Es sind also immer 20 sichtbare Zeilen unter meiner ausgewählten Zelle.

Ich bin nicht der Erste, der dieses Verhalten möchte. Weiß jemand, ob es möglich ist und wenn ja, wie? Irgendetwas(ziemlich viel) ist in VBA möglich, aber ich würde, wenn möglich, eine Lösung ohne Skript bevorzugen – danke!

Antwort1

Für jemanden, der sich bereits mit z/OS beschäftigt hat, ist das durchaus verständlich ...

Außerhalb von VBA kenne ich die Rollen-Taste, die verhindert, dass sich die Auswahl während der Bewegung ändert, und die Bild-auf/Bild-ab-Funktion, bei der die visuelle Cursorposition gleich bleibt, aber auch so viele Zeilen verschoben werden, wie auf dem Bildschirm angezeigt werden. Beides erfüllt nicht den Zweck.

Ich habe einen Sonderfall davon entworfen - er hält die Auswahl dauerhaft zentriert, zumindest wenn die Zellengrößen festgelegt sind (sonst ist die Berechnung, wie erwähnt, chaotisch und wahrscheinlich langsamer). Der angezeigte Bereich, also Bildschirmgröße + Zoom, kann mit geringem Mehraufwand dynamisch bestimmt werden. Auch die Bereichsauswahl wurde nicht behandelt - zentriert wird gemäß der oberen linken Zelle, anstatt zu zentrieren oder zu ignorieren, und fügt die Ereignisse auch nicht dynamisch zu neuen Blättern hinzu.

'Const SCRROWS = 24 ' Example screen size.
'Const SCRCOLS = 21
Global Pscrr As Long
Global Pscrc As Long

Function GetScreen() As Long()
Dim vret(2) As Long
If ActiveWindow.VisibleRange.Rows.Row + _
    ActiveWindow.VisibleRange.Rows.Count >= Rows.Count _
or ActiveWindow.VisibleRange.Columns.Column + _
    ActiveWindow.VisibleRange.Columns.Count >= Columns.Count Then
    vret(0) = Pscrr
    vret(1) = Pscrc
Else
    vret(0) = ActiveWindow.VisibleRange.Rows.Count
    vret(1) = ActiveWindow.VisibleRange.Columns.Count
    Pscrr = vret(0)
    Pscrc = vret(1)
End If
GetScreen = vret
End Function

Sub CenterScroll(slrow As Long, slcol As Long)
Dim nscrr As Long
Dim nscrc As Long
Dim scrsize() As Long
scrsize = GetScreen
nscrr = slrow - Int(scrsize(0) / 2)
If nscrr < 1 Then
    nscrr = 1
End If
nscrc = slcol - Int(scrsize(1) / 2)
If nscrc < 1 Then
    nscrc = 1
End If
ActiveWindow.ScrollRow = nscrr
ActiveWindow.ScrollColumn = nscrc
End Sub

Sub Button2_Click()
CenterScroll ActiveCell.Row, ActiveCell.Column
End Sub

'------Put this on the sheet which uses the scroll method------'
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
CenterScroll Target.Row, Target.Column
End Sub

Das Hinzufügen einer Randbegrenzung von 20 % – 80 % sollte relativ unkompliziert sein (es muss ein „Momentum“-Konzept eingeführt werden, dann muss geprüft werden, ob ausgewählte Zeile – sichtbare oberste Zeile > 0,8 * Bildschirmzeilen usw.); eine robuste Lösung liegt jedoch außerhalb meines Rahmens.

Antwort2

Klicken Sie mit der rechten Maustaste auf den Blattnamen und wählen Sie „Code anzeigen“. Fügen Sie diesen Code ein. Das sollte kein Problem sein.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Selection.CountLarge > 1 Then Exit Sub
    Dim w As Window:    Set w = ActiveWindow
    Dim r As Range:     Set r = w.VisibleRange
    If Target.Row = r(1, 1).Row Then w.SmallScroll up:=1
    If Target.Row = r(1, 1).Offset(r.Rows.Count).Row - 20 Then w.SmallScroll down:=1
End Sub

verwandte Informationen