Dynamisches Fixieren von Zeilen
#1
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
Top
#2
Hi,

nein, das ist automatisch nicht möglich - zumindest nicht mit Bordmitteln. Du musst die erste Fixierung aufheben und ab Zeile 87 neu fixieren.
Gruß Günter
Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen.
angebl. von Georg Christoph Lichtenberg (1742-1799)
Top
#3
Hi Günther,

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

Wäre das mit VBA möglich?
Top
#4
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
Gruß Günter
Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen.
angebl. von Georg Christoph Lichtenberg (1742-1799)
Top
#5
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).
Top
#6
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
Top
#7
Hallo,

das war ja nur als Hinweis und Beispiel gedacht. Ich schrieb bereits, dass hier die VBA-Spezies ranmüssen.
Gruß Günter
Jeder Fehler erscheint unglaublich dumm, wenn andere ihn begehen.
angebl. von Georg Christoph Lichtenberg (1742-1799)
[-] Folgende(r) 1 Nutzer sagt Danke an WillWissen für diesen Beitrag:
  • ExcelMania
Top
#8
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
Top
#9
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.
Herzliche Grüße aus dem Rheinland
Jörg

[Windows 10, Microsoft 365]
[-] Folgende(r) 1 Nutzer sagt Danke an LuckyJoe für diesen Beitrag:
  • ExcelMania
Top
#10
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
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste