Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

Prüfen ob Zeile in/unter fixiertem Bereich liegt

Forumthread: Prüfen ob Zeile in/unter fixiertem Bereich liegt

Prüfen ob Zeile in/unter fixiertem Bereich liegt
12.11.2024 11:47:47
earlycon
Hallo zusammen, eine Frage und Bitte um Hilfestellung an Euch:

in meiner Tabelle sind die Zeilen 1-15 fixiert. Wenn ich nun scrolle verschwinden ja die Zeilen 16 ff noch oben "unter" den fixierten Bereich. Ich würde gerne ein Shape einblenden lassen (z.B. " Achtunge, Zeilen im nicht sichtbaren Bereich!"), wenn das der Fall ist. Wie könnte man das Abfragen ?

Mit ActiveWindow.Panes(1).VisibleRange.Address bekomme ich ja den fixierten Bereich, aber wie könnte man das abfragen ? Habt Ihr eine Idee ?

Besten Dank und viele Grüße
Stefan
Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Prüfen ob Zeile in/unter fixiertem Bereich liegt
12.11.2024 12:07:52
Sigi.21
Hallo Stefan,

du kannst abfragen, wo das Fenster geteilt ist, und dann prüfen ob deine Zelle über/unter oder rechts/links von deiner Fixierung liegt.
Bsp.
Sub FensterGeteiltFixiert()

Dim z As Long, s As Long
Dim fx As Boolean
With ActiveWindow
z = .SplitRow
s = .SplitColumn
fx = .FreezePanes
End With
MsgBox "Fenster geteilt bei:" & vbCr & _
"Zeile: " & z & vbCr & _
"Spalte: " & s & vbCr & _
"fixiert: " & fx
End Sub


Gruß Sigi
Anzeige
AW: Prüfen ob Zeile in/unter fixiertem Bereich liegt
12.11.2024 13:05:13
earlycon
Hallo Sigi, vielen Dank, die Abfragemöglichkeiten merke ich mir auf jeden Fall.
Ich probiere auch die Lösung von Nutelli, gefällt mir auch...

Vielen Dank und einen schönen Tag euch.
Gruß Stefan

AW: Prüfen ob Zeile in/unter fixiertem Bereich liegt
12.11.2024 12:17:55
Nutelli
Hallo Stefan,

grundsätzlich kennt VBA kein "onScroll"-Event, sodass die direkte Abfrage der Tabellenblatt-Bewegung nur über die Abfrage der Windows-API möglich ist und das gestaltet sich in VBA sehr aufwendig. Was du aber durchaus machen kannst ist einerseits die Ermittlung, wie von Sigi.21 beschrieben, oder eine Reaktion auf das Selection_Change-Event des Tabellenblattes (oder eine Kombination von beiden Möglichkeiten).

Beispiel:


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rFixed As Range, rVis As Range
Dim lFixedLastRow As Long

Set rFixed = ActiveWindow.Panes(1).VisibleRange
Set rVis = ActiveWindow.VisibleRange

lFixedLastRow = rFixed.Row + rFixed.Rows.Count - 1
ActiveSheet.Shapes("WARNUNG").Visible = (lFixedLastRow + 1 rVis.Row)
End Sub


Im Beispiel habe ich nur n Zeilen fixiert und lasse prüfen, ob die erste Zeile des sichtbaren Bereichs gleich ist mit der letzten Zeile des fixierten Bereichs + 1. Entsprechend wird ein, auf dem Tabellenblatt hinterlegtes Shape "WARNUNG" in der Eigenschaft "visible" auf True oder False gesetzt. Die Lösung bedingt jedoch, dass der Anwender eine Zelle markiert, nachdem gescrollt wurde.

Beste Grüße
-Nutelli
Anzeige
AW: Prüfen ob Zeile in/unter fixiertem Bereich liegt
12.11.2024 13:18:27
Yal
Hallo Stefan,

aufgrund Jahrelang Erfahrung mit vielen Anwender möchte ich gern vorwarnen: es ist selten eine gute Idee, die Leute in Ihre Ahnungslosigkeit zu unterstützen.

Es mag kollegial oder zuvorkommend, jeder potentielle Stolperstein mit einem Schild "Achtung" zu versehen, hat aber 2 Nebeneffekt:
- die Anwender lernen nichts und werden nach Jahren genauso dumm sein. Es kann nicht im Sinn einer Firma sein, dass die Mitarbeiter sich nicht selbst weiterentwickeln,
- wenn Du deinen Anwender daran gewönnst, jedes "Problem" wegzunehmen, wirst Du der Depp sein, wenn auf einem neuen Problem von Dir nicht ausreichend vorgewarnt wurde.

Lernen ist schmerzhaft. Je mehr Schmerz, desto schneller der Lerneffekt. Wenn Anwender nach 3mal immer noch nicht in der Lage sind, eine fixierte Excelblatt zu erkennen, solltest Du es nicht als dein Problem sehen. 5 Minuten Schulung ist günstiger als jahrelange Pflege von nutzlosen Code.

VG
Yal
Anzeige
AW: Prüfen ob Zeile in/unter fixiertem Bereich liegt
12.11.2024 14:44:29
earlycon
Hallo Yal, vielen Dank, dass Du Deine Erfahrungen mit mir teilst. Ich kann das diese nur bestätigen.
Aber hier kann ich Entwarnung geben. Die Datei ist eigentlich ein Dashboard für einen sehr eingeschränkten Nutzerkreis, auf dem viele unterschiedlich Informationen zusammenfließen. Da es von Design nicht mehr an eine Tabelle erinnern soll, habe ich die Zeilen- und Spaltenüberschriften ausgeblendet. Daher sieht man im ersten Moment auch nicht unbedingt, wenn Zeilen im fixierten Bereich verschwunden sind. Dann soll ein dezenter Hinweis darauf erfolgen. Das klappt jetzt ganz gut.

Nochmals Danke und Dir einen schönen Tag
Viele Grüße Stefan
Anzeige
AW: Prüfen ob Zeile in/unter fixiertem Bereich liegt
12.11.2024 13:52:48
daniel
Hi
ActiveWindow.visiblerange gibt dir den sichtbaren zellbereich aus.
wenn du keine Lücken hast, schließt dieser Bereich direkt an den fixierten Bereich an.

das ergibt dann folgende einfache Abfrage:

if ActiveWindow.VisibleRange.Row > (ActiveWindow.Panes(1).VisibleRange.Rows.Count + 1) Then

.... hier die Meldung anzeigen
else
... hier die Meldung ausblenden
end if


Gruß Daniel
Anzeige
AW: Prüfen ob Zeile in/unter fixiertem Bereich liegt
12.11.2024 14:39:26
earlycon
Hi Daniel, vielen Dank, das ist ja noch kürzer vom Code her als der von Nutelli und somit besser 😉

Kann man den Code auf ThisWorkbook.Sheets("Startmaske") statt ActiveWindows beschränken, damit
der Code weiterläuft wenn auf eine andere Tabelle/Datei gewechselt wird ?

Liebe Grüße
Stefan
Anzeige
AW: Prüfen ob Zeile in/unter fixiertem Bereich liegt
12.11.2024 15:29:14
daniel
ich vermute nicht.
das Sheet hat diese Eigenschaften, die du benötigst (visiblerange) nicht.
die sind dem jeweiligen Window zugeordnet.
Gruß Daniel
AW: Prüfen ob Zeile in/unter fixiertem Bereich liegt
12.11.2024 17:04:59
Nutelli
Hi Stefan,

beim Code kommt es auf eine gute Struktur und Lesbarkeit an. Wenn vielleicht irgendwann mal ein Review ansteht oder jemand anders den Code lesen und interpretieren soll, kann es besser sein etwas ausführlicher zu schreiben. Am Ende macht der Compiler (oder bei VBA der Interpreter) daraus ohnehin eine optimierte Maschinenlogik. Man kann also nicht pauschal sagen, dass kürzer = besser ist ;)

Du kannst dir den IF-Block auch sparen und alles in eine Zeile schreiben:



Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ActiveSheet.Shapes("WARNUNG").Visible = (ActiveWindow.VisibleRange.Rows.Count + 1 ActiveWindow.Panes(1).VisibleRange.Row)
End Sub


Was hinter dem Zuweisungsoperator (=) steht wird im konkreten Fall zu "true" oder "false" evaluiert und daher wäre der IF-Block mit der Prüfung sogar eine Code-Dopplung oder "Boilerplate-Code"

Alles eine Frage des Geschmacks und der Schmerzen beim Lesen von fremdem Code :D

Viele Grüße
-Nutelli
Anzeige
AW: Prüfen ob Zeile in/unter fixiertem Bereich liegt
12.11.2024 15:50:27
earlycon
OK, alles klar, schade...

Gruß Stefan
AW: Prüfen ob Zeile in/unter fixiertem Bereich liegt
12.11.2024 13:03:16
earlycon
Hallo Nutelli, das ist ja grandios 👍🏼 Mit SelectionChange kann ich leben. Oh man, es gibt so vieles in Excel was man noch nicht kennt... 😄

Herzlichen Dank für Deine Unterstützung.
Viele Grüße
Stefan
AW: Prüfen ob Zeile in/unter fixiertem Bereich liegt
12.11.2024 14:18:11
earlycon
Hallo Nutelli,

ich habe Deinen Code jetzt übernommen und angepasst, das funktioniert echt gut 😉
Nur würde ich das gerne noch auf die aktuelle Datei beschränken, d.h. um Thisworkbook und Sheets("Startmaske") ergänzen.

Wenn ich diese Zeile: Set rFixed = ActiveWindow.Panes(1).VisibleRange aber so ändere: Set rFixed = ThisWorkbook.Sheets("Startmaske").Panes(1).VisibleRange
erhalte ich die Fehlermeldung "Objekt unterstützt diese Eigenschaft oder Methode nicht". Also habe ich wohl einen Fehler gemacht.

Magst Du noch mal drüberschauen ?

Vielen Dank und Gruß
Stefan
Anzeige
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18