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

freezepanes ohne activewindow ?

Forumthread: freezepanes ohne activewindow ?

freezepanes ohne activewindow ?
30.05.2006 10:19:01
Klaus
Moin,
Der Rekorder schmeisst mir folgenden Code raus, um ein Fenster zu fixieren:
Sub fixieren()
Sheets("Tabelle2").Select
Range("c10").Select
ActiveWindow.FreezePanes = True
End Sub

Nun ist es aber so, dass ich das zu fixierende Fenster automatisch erzeuge, mit folgendem Codefetzen:
with Sheets("Eingang")
irow = .Cells(Rows.Count, 1).End(xlUp).Row
For anz = 4 To irow
UrName = .Range("b" & anz)
Sheets.Add.Name = UrName
Sheets("MUSTER").Cells.Copy
Sheets(UrName).Paste
Sheets(UrName).Range("n1") = .Range("c" & anz)
Sheets(UrName).Range("k1") = .Range("b" & anz)
Sheets(UrName).PageSetup.PrintArea = "L1:N1"
End If
Next anz
end with

Den Code hätt ich gerne select-frei gehalten, daher sträube ich mich noch, den o.g. Recorder-Code einzusetzen.
Sheets(UrName).range("C10").FreezePanes = True 
funktioniert leider nicht so richtig. Kann mir jemand auf die Sprünge helfen? Dank und Gruß, Klaus M.vdT.
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: freezepanes ohne activewindow ?
30.05.2006 10:27:16
ANdreas
Hallo Klaus,
in dieser Situation ist das Selecten leider unumgänglich.
Siehe auch in den FAQ von Hans:
https://www.herber.de/xlfaq/xlbasics/sel_6.htm
Gruß
Andreas
AW: freezepanes ohne activewindow ?
30.05.2006 10:28:59
u_
Hallo,
das ist m.W. einer der Fälle, wo es ohne Select nicht geht.
Ich lass mal offen.
Gruß
Geist ist geil!
(Dies ist ein allgemeines Statement und nicht an bestimmte Personen gerichtet.)
Anzeige
AW: freezepanes ohne activewindow ?
30.05.2006 10:55:03
Martina
hi,
Hajo hatte da mal was:
allerdings ist unsichtbar ! immer eine Fensterteilung akiv
probier mal:
Const cSplitCol As Integer = 3 'Teilungsspalte (C10) BITTE ANPSSEN
Const cSplitRow As Long = 10 'Teilungszeile BITTE ANPASSEN

Sub Fixierung()
'   die Idee zu diesem Code stammt von Nike aus dem Herber Forum
'   dieser Code ist eine gemeinsame Arbeit von
'       Peter Haserodt
'       Franz Pölt
'       und Hajo.Ziplies@web.de  Stand 06.09.2003
With ActiveWindow
If .FreezePanes = False Then
'            von Peter Haserodt
.Split = False
.ScrollColumn = 1
.ScrollRow = 1
.SplitRow = cSplitRow - .VisibleRange.Row + 1
.SplitColumn = cSplitCol
.FreezePanes = True
End If
End With
End Sub


Sub neu()
With Sheets("Eingang")
irow = .Cells(Rows.Count, 1).End(xlUp).Row
For anz = 4 To irow
UrName = .Range("b" & anz)
Sheets.Add.Name = UrName
Fixierung
Sheets("MUSTER").Cells.Copy
Sheets(UrName).Paste
Sheets(UrName).Range("n1") = .Range("c" & anz)
Sheets(UrName).Range("k1") = .Range("b" & anz)
Sheets(UrName).PageSetup.PrintArea = "L1:N1"
Next anz
End With
End Sub

MfG
Martina
Anzeige
Danke für die Infos, hab nen Workaround gebaut.
30.05.2006 11:33:03
Klaus
Hallo alle,
Danke für die Info.
Martina, ich hab deinen Code noch nicht ausprobiert - aber da die Zeile

With ActiveWindow
drin vorkommt hilft mir der leider auch nicht. Ich müsste ja erst ein neues Tabellenblatt selektieren, um im "aktive Window" zu sein, und da wär dann wieder das select (oder übersehe ich was?)
Als Workaround nutze ich einen Button, auf dem dieses Makro liegt:
Sub FensterFixieren()
Application.ScreenUpdating = False
For i = 1 To Worksheets.Count
Worksheets(i).Select
Range("i11").Select
ActiveWindow.FreezePanes = True
Next i
Sheets("Eingang").Select
Application.ScreenUpdating = True
End Sub

Mein Code ist zwar leider nicht mehr vollautomatisch, aber einen Button zu drücken kann ich selbst meinen DAU-Kollegen noch zumuten :)
Gruß,
Klaus M.vdT.
Anzeige
AW: Danke für die Infos, hab nen Workaround gebaut
30.05.2006 11:38:56
Martina
(oder übersehe ich was?) ja
du bist bei deinem code automatisch im neuen Tabellenblatt !
einfach mal ausprobieren
MfG
Martina
Aaaah, es funktioniert! Blos warum?
30.05.2006 11:56:30
Klaus
Hallo Martina,
das ist ganz toll, es funktioniert! Danke danke danke :)
Ich hab blos keinen Plan, warum es funktioniert. Kannst du mir kurz nahebringen, warum in diesem Fall das "aktive Window" nicht das sichtbare ist? Oder muss ich mich direkt an Hajo, Peter und Franz wenden? Ich verstehe gern Code, bevor ich ihn einsetze ..
Dank und Gruß,
Klaus M.vdT.
Anzeige
AW: Aaaah, es funktioniert! Blos warum?
30.05.2006 12:23:02
Martina
hi,
wenn du per vba ein Blatt kopierst oder hinzufügst bist du immer mit dem vba-code auf diesem kopierten Blatt
genauso ist immer eine hinzugefügte oder kopierte Mappe immer die Aktive
das ist dir nur bisher nicht aufgefallen ;-)
MfG
Martina
Wieder was gelernt. :-)
30.05.2006 12:32:24
Klaus
Hallo Martina,
das ist mir wirklich noch nicht aufgefallen.
Vielen Dank, ich habe heute etwas neues gelernt.
Gruß,
Klaus M.vdT.
Anzeige
;
Anzeige

Infobox / Tutorial

Freezepanes ohne ActiveWindow in Excel VBA


Schritt-für-Schritt-Anleitung

Um in Excel VBA Freezepanes ohne die Verwendung von ActiveWindow zu implementieren, kannst du den folgenden Code verwenden. Dieser Code erstellt neue Blätter und fixiert eine bestimmte Zeile, ohne dass du die Select-Anweisung verwenden musst.

Sub FensterFixieren()
    Dim irow As Long
    Dim UrName As String

    With Sheets("Eingang")
        irow = .Cells(Rows.Count, 1).End(xlUp).Row
        For anz = 4 To irow
            UrName = .Range("b" & anz)
            Sheets.Add.Name = UrName

            ' Daten kopieren
            Sheets("MUSTER").Cells.Copy
            Sheets(UrName).Paste

            ' Freezepanes ohne ActiveWindow
            Sheets(UrName).Range("C10").Select
            ActiveWindow.FreezePanes = True

            ' Weitere Einstellungen
            Sheets(UrName).Range("n1") = .Range("c" & anz)
            Sheets(UrName).Range("k1") = .Range("b" & anz)
            Sheets(UrName).PageSetup.PrintArea = "L1:N1"
        Next anz
    End With
End Sub

In diesem Code wird zunächst das Blatt "Eingang" verwendet, um die Namen für neue Blätter zu generieren. Danach wird eine Zeile in jedem neuen Blatt fixiert.


Häufige Fehler und Lösungen

  1. Fehler: ActiveWindow.FreezePanes funktioniert nicht.

    • Lösung: Stelle sicher, dass du die richtige Zeile selektierst, bevor du den Befehl ausführst. Wenn du ActiveWindow.FreezePanes verwendest, ist es wichtig, dass das Fenster bereits auf das richtige Blatt eingestellt ist.
  2. Fehler: Sheets(UrName).Range("C10").FreezePanes = True gibt einen Fehler aus.

    • Lösung: Bei der Verwendung von FreezePanes muss das aktive Fenster auf das Zielblatt gesetzt sein. Daher ist das direkte Setzen von FreezePanes auf ein Blatt nicht möglich, ohne vorher das Fenster zu aktivieren.

Alternative Methoden

Eine Alternative zum Fixieren von Fenstern in Excel ist die Verwendung von Split. Hier ein Beispiel:

Sub SplitFenster()
    With ActiveWindow
        .SplitRow = 10 ' Zeile, ab der geteilt wird
        .FreezePanes = True
    End With
End Sub

Diese Methode teilt das Fenster und fixiert die obere Zeile, sodass sie beim Scrollen sichtbar bleibt.


Praktische Beispiele

Hier sind einige praktische Beispiele für die Verwendung von Freezepanes in Excel VBA:

  1. Fixiere die oberste Zeile ohne ActiveWindow:

    Sub FreezeTopRow()
       Dim ws As Worksheet
       Set ws = ThisWorkbook.Sheets("Eingang")
       ws.Rows(1).Select
       ActiveWindow.FreezePanes = True
    End Sub
  2. Fixiere eine benutzerdefinierte Zeile und Spalte:

    Sub CustomFreezePanes()
       Dim ws As Worksheet
       Set ws = ThisWorkbook.Sheets("Eingang")
       ws.Range("C10").Select
       ActiveWindow.FreezePanes = True
    End Sub

Tipps für Profis

  • Vermeide Select: Um die Leistung zu verbessern, vermeide die Verwendung von Select oder Activate. Nutze stattdessen direkt Referenzen zu Objekten, um den Code sauberer und schneller zu gestalten.

  • Nutze Application.ScreenUpdating: Schalte Application.ScreenUpdating aus, bevor du größere Änderungen vornimmst, um Flackern zu reduzieren und die Ausführungsgeschwindigkeit zu erhöhen.

Application.ScreenUpdating = False
' Dein Code hier
Application.ScreenUpdating = True

FAQ: Häufige Fragen

1. Warum kann ich FreezePanes nicht direkt auf ein Blatt anwenden? Die Methode FreezePanes ist an das aktive Fenster gebunden. Daher muss das Fenster auf das gewünschte Blatt eingestellt sein, bevor du den Befehl ausführst.

2. Wie kann ich Freezepanes ohne ActiveWindow setzen? Zurzeit gibt es keine Möglichkeit, dies direkt zu tun, da FreezePanes immer auf das aktive Fenster angewendet wird. Verwende Workarounds wie das Setzen der Zeile und Spalte über Split.

3. Gibt es einen Unterschied zwischen FreezePanes und Split? Ja, FreezePanes fixiert eine Zeile oder Spalte, während Split das Fenster in mehrere Bereiche unterteilt, die unabhängig gescrollt werden können.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige