Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1088to1092
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Fenster fixieren anhand von Druckbereich

Fenster fixieren anhand von Druckbereich
Druckbereich
Guten Tag
Ich möchte in meiner Arbeitsmappe die Fensterfixierung in allen Worksheets automatisch vornehmen.
In jedem Fenster soll der Drucktitel fixiert werden (sofern definiert) - nur der der Druckbereich soll sich bewegen.
Wie kann so etwas bewerkstelligt werden?
Danke für eine Antwort.
Gruss, Peter

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Fenster fixieren anhand von Druckbereich
16.07.2009 09:37:26
Druckbereich
hallo peter,
"Wie kann so etwas bewerkstelligt werden?"
...mit der eigenen creativität.
2mal dem makrorekorder anwerfen, ein wenig recherchieren und es sollte gehen.
gruß selli
AW: Fenster fixieren anhand von Druckbereich
16.07.2009 09:52:06
Druckbereich
Hi.
Probier es mal so:
' Fixiert die Wiederholungszeilen/spalten
Sub fixHeader()
Dim firstDataRow
Dim firstDataColumn
Dim myWsh As Worksheet
' Kann Worksheet oder auch Diagramm sein, daher Typ offen
Dim actWsh As Object
Application.ScreenUpdating = False
' Aktuell aktives Blatt speichern
Set actWsh = ActiveSheet
For Each myWsh In ActiveWorkbook.Worksheets
myWsh.Activate
With myWsh.PageSetup
' Liest die Drucktitelzeilen aus und speichert die erste Zeile danach
If .PrintTitleRows  "" Then
firstDataRow = Range(.PrintTitleRows).Row + Range(.PrintTitleRows).Rows.Count
Else
firstDataRow = 1
End If
' Liest die Drucktitelspalten aus und speichert die erste Spalte danach
If .PrintTitleColumns  "" Then
firstDataColumn = Range(.PrintTitleColumns).Column + Range(.PrintTitleColumns). _
Columns.Count
Else
firstDataColumn = 1
End If
End With
myWsh.Cells(firstDataRow, firstDataColumn).Select
ActiveWindow.FreezePanes = False
If firstDataRow  1 Then
' Nur Überschrift oben, also ganze Zeile markieren
If firstDataColumn = 1 Then
Selection.EntireRow.Select
End If
' In beiden Fällen wird fixiert
ActiveWindow.FreezePanes = True
Else
' Nur Überschrift links, also ganze Spalte markieren
If firstDataColumn  1 Then
Selection.EntireColumn.Select
ActiveWindow.FreezePanes = True
End If
' Hier bleibt nur noch A1 als erste Datenspalte übrig und dann kommt keine  _
Fixierung
' Deswegen ist das Anschalten der Fixierung in der If-Schleife
End If
Next
' Wieder zurück zum zuvor aktiven Blatt
actWsh.Activate
Application.ScreenUpdating = True
End Sub

Gruss, Jogy
Anzeige
AW: zu kompliziert
16.07.2009 11:04:29
Jogy
Hi.
Die nachfolgenden Codes sind besser, ich hab mich hier etwas verkopft. Weil ich aus Gewohnheit immer die ganze Zeile markiere, wenn ich alle Zeilen darüber fixieren will, habe ich das so im Code umgesetzt. Ist aber gar nicht nötig, es reicht wenn die erste Zelle in der Zeile fixiert ist.
Von daher käme bei mir eigentlich das raus:
Sub fixHeader()
Dim firstDataRow
Dim firstDataColumn
Dim myWsh As Worksheet
' Kann Worksheet oder auch Diagramm sein, daher Typ offen
Dim actWsh As Object
Application.ScreenUpdating = False
' Aktuell aktives Blatt speichern
Set actWsh = ActiveSheet
For Each myWsh In ActiveWorkbook.Worksheets
myWsh.Activate
With myWsh.PageSetup
' Liest die Drucktitelzeilen aus und speichert die erste Zeile danach
If .PrintTitleRows  "" Then
firstDataRow = myWsh.Range(.PrintTitleRows).Row + Range(.PrintTitleRows).Rows. _
Count
Else
firstDataRow = 1
End If
' Liest die Drucktitelspalten aus und speichert die erste Spalte danach
If .PrintTitleColumns  "" Then
firstDataColumn = myWsh.Range(.PrintTitleColumns).Column + Range(. _
PrintTitleColumns).Columns.Count
Else
firstDataColumn = 1
End If
End With
' Selektiert die erste Datenzelle (notwendig für Fixierung)
myWsh.Cells(firstDataRow, firstDataColumn).Select
' Fixierung muss aus sein, sonst übernimmt es die neue nicht
ActiveWindow.FreezePanes = False
' Fixieren, wenn es was zu fixieren gibt
If firstDataRow  1 Or firstDataColumn  1 Then
ActiveWindow.FreezePanes = True
End If
Next
' Wieder zurück zum zuvor aktiven Blatt
actWsh.Activate
Application.ScreenUpdating = True
End Sub

Gruss, Jogy
Anzeige
Fenster fixieren nach PageSetup
16.07.2009 10:14:33
Erich
Hi Peter,
hier noch ein Vorschlag:

Option Explicit
Sub FensterFix()
Dim rngS As Range, rngA As Range
Dim strR As String, strC As String
Dim lngR As Long, lngC As Long
Set rngS = Selection
Set rngA = ActiveCell
With ActiveSheet.PageSetup
strR = .PrintTitleRows
strC = .PrintTitleColumns
If strR > "" Then lngR = Range(strR).Row + Range(strR).Rows.Count
If strC > "" Then lngC = Range(strC).Column + Range(strC).Columns.Count
If lngR + lngC = 0 And .PrintArea > "" Then
lngR = Range(.PrintArea).Row
lngC = Range(.PrintArea).Column
End If
If lngR + lngC > 0 Then
ActiveWindow.FreezePanes = False
Cells(Application.Max(1, lngR), Application.Max(1, lngC)).Select
ActiveWindow.FreezePanes = True
rngS.Select
rngA.Activate
End If
End With
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
Ergänzung: Fenster fixieren in allen Blättern
16.07.2009 11:01:08
Erich
Hi Peter,
dass das Fixieren in allen Tabellenblättern passieren sollte, hatte ich übersehen.
Du kannst dazu dieses Makro aufrufen:

Sub AlleFensterFix()
Dim wksA As Worksheet, wks As Worksheet
Set wksA = ActiveSheet
'  Application.ScreenUpdating = False    ' nach dem Test aktivieren
For Each wks In Worksheets
wks.Activate
FensterFix   ' hier wird das bisherige Makro gestartet
Next
Application.ScreenUpdating = True
wksA.Activate
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: Fenster fixieren anhand von Druckbereich
16.07.2009 10:24:26
Druckbereich
Hallo Peter,
hier ist ein Makro für Dich:
Sub Drucktitel_fixieren()
Dim shBlatt As Worksheet, _
strZeilen As String, _
strSpalten As String, _
lngZeile As Long, _
lngSpalte As Long
'Alle Arbeitsblätter in der Mappe durchlaufen
For Each shBlatt In ActiveWorkbook.Worksheets
'Aktivieren
shBlatt.Activate
'Drucktitel (Zeilen und Spalten auslesen)
strZeilen = ActiveSheet.PageSetup.PrintTitleRows
strSpalten = ActiveSheet.PageSetup.PrintTitleColumns
'Ohne Drucktitel nichts ändern.
If strZeilen  "" Or strSpalten  "" Then
'Zeile bestimmen, oberhalb derer fixiert werden soll
If strZeilen = "" Then
lngZeile = 1
Else
lngZeile = Range(strZeilen).Rows(Range(strZeilen).Rows.Count).Row + 1
End If
'Spalte bestimmen, von der links fixiert werden soll
If strSpalten = "" Then
lngSpalte = 1
Else
lngSpalte = Range(strSpalten).Columns(Range(strSpalten).Columns.Count).Column +  _
1
End If
'Eventuell bestehende Fixierung aufheben
ActiveWindow.FreezePanes = False
'Zelle wählen, fixieren
Cells(lngZeile, lngSpalte).Select
ActiveWindow.FreezePanes = True
End If
Next shBlatt
End Sub

Geht'`s? Gruß, Wolli
Anzeige
AW: Fenster fixieren anhand von Druckbereich
16.07.2009 11:25:10
Druckbereich
Hallo Alle
Vielen Dank für die Beiträge - sie haben alle funktioniert.
Wenn ich bereits eine überholte Fensterfixierung (z.B. nur eine Zeilenfixierung und Spaltenfixierung) habe, musste ich teilweise noch folgende Codezeile einfügen, damit die Fixierung aktualisiert wird.
With ActiveWindow
.SplitColumn = 0
.SplitRow = 0
End With
Nun habe ich noch folgendes Problem:
Wenn ich ein neues Fenster öffne, fallen alle Fixierungen für das neue Fenster raus. Wie muss der Code erweitert werden, dass alle Fenster abgearbeitet werden, wenn ich mehrere davon habe?
Gruss, Peter
Anzeige
So:
16.07.2009 11:53:18
Wolli
(Das gesamte Makro wird für jedes Fenster abgearbeitet)
Vorsicht, verwechsele nicht Teilung und Fixierung! Ich persönlich bin der Meinung, dass geteilte Fenster zu Verwirrung und Unheil führen und in das Reich von Excel 4.0 gehören ... ;-)
Gruß, Wolli
Sub Drucktitel_fixieren()
Dim shBlatt As Worksheet, _
strZeilen As String, _
strSpalten As String, _
lngZeile As Long, _
lngSpalte As Long, _
wndFenster As Window
For Each wndFenster In ActiveWorkbook.Windows
wndFenster.Activate
'Alle Arbeitsblätter in der Mappe durchlaufen
For Each shBlatt In ActiveWorkbook.Worksheets
'Aktivieren
shBlatt.Activate
'Drucktitel (Zeilen und Spalten auslesen)
strZeilen = ActiveSheet.PageSetup.PrintTitleRows
strSpalten = ActiveSheet.PageSetup.PrintTitleColumns
'Ohne Drucktitel nichts ändern.
If strZeilen  "" Or strSpalten  "" Then
'Zeile bestimmen, oberhalb derer fixiert werden soll
If strZeilen = "" Then
lngZeile = 1
Else
lngZeile = Range(strZeilen).Rows(Range(strZeilen).Rows.Count).Row + 1
End If
'Spalte bestimmen, von der links fixiert werden soll
If strSpalten = "" Then
lngSpalte = 1
Else
lngSpalte = Range(strSpalten).Columns(Range(strSpalten).Columns.Count). _
Column + 1
End If
'Eventuell bestehende Fixierung aufheben
wndFenster.FreezePanes = False
'Zelle wählen, fixieren
wndFenster.Activate
Cells(lngZeile, lngSpalte).Select
wndFenster.FreezePanes = True
End If
Next shBlatt
Next wndFenster
End Sub

Anzeige
AW: So:
16.07.2009 13:32:56
Peter
Hallo Wolli
Genial!
Vielen Dank, Peter
AW: Fenster fixieren anhand von Druckbereich
16.07.2009 11:59:58
Druckbereich
Hi.
Das SplitColumn und SpliRow solltest Du aber nur brauchen, wenn es eine Teilung des Fensters war.
Und Deine neue Frage verstehe ich jetzt nicht.
Gruss, Jogy

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige