Tim hat einige Arbeitsblätter mit zwei separaten Abschnitten (nennen wir sie obere und untere Abschnitte) mit leicht unterschiedlichen Spaltenüberschriften. Er hat die obere Reihe eingefroren, um die Überschriften des oberen Abschnitts beim Scrollen nach unten sichtbar zu halten, aber nachdem er über einen bestimmten Punkt gescrollt hat, betrachtet Tim die Daten des unteren Abschnitts, wobei die Überschriften des oberen Abschnitts noch oben sind. Er möchte wissen, ob es eine Möglichkeit gibt, diese eingefrorene Kopfzeile so zu ändern, dass die Kopfzeilen des unteren Abschnitts angezeigt werden, wenn er bis zu dem Punkt scrollt, an dem nur Daten des unteren Abschnitts angezeigt werden.

Ja, es gibt eine Möglichkeit, dies zu tun, aber es werden Makros verwendet.

Bevor Sie eine makrobasierte Lösung in Betracht ziehen, sollten Sie Ihre Daten so umstrukturieren, dass sich jeder Ihrer Abschnitte auf unterschiedlichen Arbeitsblättern befindet. (Aus gestalterischer Sicht wäre dies die einfachste Lösung.) Wenn dies nicht möglich ist, müssen Sie sich Makros ansehen.

Ein einfacher Ansatz besteht darin, einfach zu ändern, was in der obersten Zeile (Zeile 1) Ihres Arbeitsblatts gespeichert ist, je nachdem, welche Zeile ausgewählt ist. Das folgende Makro nimmt beispielsweise Änderungen in der oberen Zeile vor, je nachdem, wo sich die aktive Zelle befindet. Wenn es vor Zeile 40 liegt, wird ein Satz von Überschriften in die erste Zeile eingefügt. Wenn nach Zeile 40 ein weiterer Satz von Headern gestopft wird.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim iBottomData As Integer

iBottomData = 40

If ActiveCell.Row < iBottomData Then         Cells(1, 1).Value = "Last Name"

Cells(1, 2).Value = "First Name"

Cells(1, 3).Value = "Address"

Cells(1, 4).Value = "Balance"

Else         Cells(1, 1).Value = "Account"

Cells(1, 2).Value = "Sales Rep"

Cells(1, 3).Value = "Status"

Cells(1, 4).Value = ""

End If End Sub

Um das Makro zu verwenden, stellen Sie einfach sicher, dass Sie es im Codefenster für das Arbeitsblatt platzieren, das die beiden Datenabschnitte enthält. Sie sollten auch den der iBottomData-Variablen zugewiesenen Wert ändern, um die Zeilennummer des Beginns Ihres unteren Datenabschnitts wiederzugeben.

Wenn Sie die eingefrorene Zeile tatsächlich ändern möchten, während Sie sich im Arbeitsblatt nach unten bewegen, muss das Makro etwas robuster sein. Tatsächlich folgen zwei Makros (beide werden erneut im Codefenster des Arbeitsblatts angezeigt), die beim Ändern der ausgewählten Zelle und beim Klicken mit der rechten Maustaste auf das Arbeitsblatt aktiviert werden.

Private Sub Worksheet_BeforeRightClick(ByVal _   Target As Range, Cancel As Boolean)

Application.ScreenUpdating = False     ActiveWindow.FreezePanes = False     ActiveWindow.Split = False     Application.EnableEvents = False     Application.Goto Cells(1, 1), scroll:=True     With ActiveWindow         .SplitColumn = 0         .SplitRow = 1     End With     ActiveWindow.FreezePanes = True     Application.Goto Cells(Target.Row - 1, _       Target.Column), scroll:=True     Application.EnableEvents = True     On Error Resume Next        'MUST reenable events     Application.EnableEvents = False     ActiveCell.Offset(-1, 1 - Target.Column).Select     ' so the right click menu doesn't popup     ' only if this is the second header row.

Cancel = True      Application.EnableEvents = True End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Application.ScreenUpdating = False     If Cells(Target.Row, 1).Value <> "title2" Then Exit Sub     ActiveWindow.FreezePanes = False     ActiveWindow.Split = False     Application.Goto Cells(Target.Row, 1), scroll:=True     With ActiveWindow         .SplitColumn = 0         .SplitRow = 1     End With     ActiveWindow.FreezePanes = True     On Error Resume Next        'MUST reenable events     Application.EnableEvents = False     ActiveCell.Offset(1, 1 - Target.Column).Select     Application.EnableEvents = True End Sub

Der Ereignishandler Worksheet_SelectionChange verschiebt den eingefrorenen Split automatisch unter die zweite Zeile von Überschriften, wenn Ihr aktiver Zellencursor diese Zeile erreicht. Diese Zeile wird in der If-Anweisung erkannt, die prüft, ob die erste Zelle in der Zeile den Text „title2“ enthält oder nicht.

(Offensichtlich sollte dies geändert werden, um zu reflektieren, was wirklich in dieser ersten Zelle sein wird.)

Der Ereignishandler Worksheet_BeforeRightClick verschiebt den eingefrorenen Split zurück zum ersten Satz von Überschriften, belässt jedoch die aktive Zelle in der Zeile über dem zweiten Satz von Überschriften.

Sie sollten verstehen, dass beide in diesem Tipp vorgestellten Makrolösungen davon ausgehen, dass Sie tatsächlich durch das Arbeitsblatt scrollen und die ausgewählte Zelle ändern, während Sie fortfahren. (Mit anderen Worten, Sie drücken die Abwärtspfeiltaste, um zu scrollen.) Wenn Sie einfach die Anzeige im Arbeitsblatt mithilfe der vertikalen Bildlaufleiste ändern, ändern sich die eingefrorenen Überschriften nicht, da Sie die nicht ändern Die ausgewählte Zelle und die Ereignishandler werden niemals ausgelöst.

Das Erstellen einer umfassenderen Lösung würde den Rahmen dieses Tipps sprengen, da eine Schnittstelle zum tatsächlichen Betriebssystem erforderlich wäre.

Wenn Sie jedoch an dieser Route interessiert sind, ist diese Seite auf der Website von Chip Pearson möglicherweise ein guter Ausgangspunkt:

http://www.cpearson.com/excel/DetectScroll.htm

_Hinweis: _

Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der ExcelTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.

ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.

Dieser Tipp (3446) gilt für Microsoft Excel 97, 2000, 2002 und 2003. Eine Version dieses Tipps für die Multifunktionsleistenschnittstelle von Excel (Excel 2007 und höher) finden Sie hier: