Clever-Excel-Forum

Normale Version: Dynamisches Fixieren von Zeilen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo,

ich würde gerne die erste Zeile meines Arbeitsblattes fixieren.
Wenn ich im Arbeitsblatt weiter runter scrolle, soll diese Fixierung bis zu einer bestimmten Zeile gelten.

Ab Zeile 87 soll nicht mehr die erste, sondern eben Zeile 87 fixiert werden.

Ist das irgendwie möglich?

Viele Grüße
Hi,

nein, das ist automatisch nicht möglich - zumindest nicht mit Bordmitteln. Du musst die erste Fixierung aufheben und ab Zeile 87 neu fixieren.
Hi Günther,

vielen Dank schon mal für deine Rückmeldung.

Wäre das mit VBA möglich?
Hi,

da müsstest du auf die VBA-Spezies warten - hierbei kann ich nicht helfen.

Edit: Ich könnte mir vorstellen, dass es mit einem Makro klappt. Zum Testen habe ich eines aufgezeichnet (Zeile 1 war fixiert, wurde aufgehoben und Zeile 20 wieder fixiert).

Code:
Option Explicit

Sub ZeilenFixieren()
'
' ZeilenFixieren Makro
'

'
    Rows("20:20").Select
    ActiveWindow.FreezePanes = False
    ActiveWindow.FreezePanes = True
End Sub
Hi,

danke!
Aber damit fixiere ich alle Zeilen von 1 bis 20. 
Die Idee war ja, Zeile 1 zu fixieren. Wenn ich runter scrolle bleibt die erste Zeile immer oben.

Sobald ich bei Zeile 87 ankomme (mit "ankommen" meine ich, dass Zeile 87 im Fenster direkt unter der Zeile 1 erscheint), soll die Fixierung für Zeile 1 aufgehoben und stattdessen Zeile 87 fixiert werden.
Wichtig wäre, nur die Zeile 87 zu fixieren, da andernfalls (Fixierung der Zeilen 1 - 87) immer das gesamte Fenster fixiert bleiben wird (da selbst bei geringem Zoom-Faktor nur ca. 50 Zeilen auf einmal im Fenster zu sehen sind).
Hallo,

ich habe den Code von hier entsprechend geändert:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  Static lngZeile As Long
  Dim lngT As Long
 
  lngT = Application.RoundDown(Target.Cells(1).Row / 86, 0) * 86 + 1
  If lngT <> lngZeile Then
    lngZeile = lngT
    ActiveWindow.FreezePanes = False
    Application.Goto Rows(lngT), True
    Rows(lngT + 1).Select
    ActiveWindow.FreezePanes = True
    Target.Select
  End If
End Sub
Gruß Uwe
Hallo,

das war ja nur als Hinweis und Beispiel gedacht. Ich schrieb bereits, dass hier die VBA-Spezies ranmüssen.
Hi Uwe,

cool, das geht auf jeden Fall schon in die richtige Richtung!
Wenn ich den anderen Thread richtig verstehe, funktioniert das allerdings nur, wenn man auch in die entsprechenden Zellen klickt bzw. mit den Pfeiltasten "runter scrollt".

Gibt es irgendeine Möglichkeit, dies auch einfach für das Scrollen mit der Maus zuzulassen (mit dem Mausrad oder Nutzung des Navigationsbalken auf der rechten Seite), ohne dass man in die einzelnen Zellen klicken muss?

Mit deinem aktuellen Code funktioniert es durch "runter scrollen" mit den Pfeiltasten. Wenn ich aber wieder hoch scrollen möchte, und höher als Zeile 87 gehe, wird automatisch Zeile 1 - 24 fixiert (anstatt wieder nur die Zeile 1).

Hast du eine Idee, wie man das umgehen könnte?

Vielen Dank schon mal für deine Hilfe und viele Grüße,
David
Hi,

das dürfte richtig „an's Eingemachte” gehen, wie man so schön sagt, denn mit den VBA-„Bordmitteln” geht das nicht. Ein Beispiel zeigt dieser Link, wobei ich ehrlich zugeben muss, dass das meinen Horizont übersteigt.
Hallo David,

ich halte mich (auch) nur an die Bordmittel (Select-Event). Blush
Teste mal das:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Static lngZeile As Long
Dim lngT As Long

On Error Resume Next
lngT = ActiveWindow.VisibleRange.Row
If lngT > 86 And lngZeile <> 87 Then
lngZeile = 87
Application.EnableEvents = False
ActiveWindow.FreezePanes = False
Application.Goto Cells(87, 1), True
ActiveCell.Offset(1).Select
ActiveWindow.FreezePanes = True
Target.Select
Application.EnableEvents = True
ElseIf Target.Row < 87 And lngZeile <> 1 Then
lngZeile = 1
Application.EnableEvents = False
ActiveWindow.FreezePanes = False
Application.Goto Cells(1, 1), True
ActiveCell.Offset(1).Select
ActiveWindow.FreezePanes = True
Application.Intersect(Rows(1), Target.EntireColumn).Select
Application.EnableEvents = True
End If
End Sub
Gruß Uwe
Seiten: 1 2