![]() |
Betrifft: Makro zum ein- und entfrieren
von: Thms Drng
Geschrieben am: 06.08.2014 09:42:37
Hallo Forum,
ich habe ein sehr "breites" Tabellenblatt und es wäre aufgrund des Inhalts sehr praktisch, wenn beim Öffnen von diesem Blatt, ab Zeile und Spalte F10 "eingefroren" wird, so dass deren Inhalte beim scrolen sichtbar bleiben. Sobald aber nach "rechts" über die Spalte "AP" hinaus gescrolt wird, hätte ich gerne, dass die "Einfrierung" aufgehoben wird. Kann man hierfür ein Makro ohne großen Aufwand machen? Ich habe leider keine Kenntnisse in VBA.
LG
Thomas
![]() ![]() |
Betrifft: Edit: Makro zum ein- und entfrieren
von: Thms Drng
Geschrieben am: 06.08.2014 10:29:09
Wenn möglich, sollte im Anschluss dann ab Spalte CT und Zeile 11 fixiert werden
![]() ![]() |
Betrifft: AW: Edit: Makro zum ein- und entfrieren
von: Rudi Maintaire
Geschrieben am: 06.08.2014 11:03:51
Hallo,
reines Scrollen löst kein Ereignis aus.
Gruß
Rudi
![]() ![]() |
Betrifft: AW: Edit: Makro zum ein- und entfrieren
von: Thms Drng
Geschrieben am: 06.08.2014 11:12:47
Hi Rudi,
verstehe. Eine Möglichkeit wäre ja dann, dass man eine Zelle "klickt/aktiviert" die das Makro dann ausführt?
LG
![]() ![]() |
Betrifft: AW: Edit: Makro zum ein- und entfrieren
von: Robert
Geschrieben am: 06.08.2014 11:24:05
Hallo,
in den Code des Tabellenblatts:
Option Explicit Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim Zelle As Range If Target.Column > 43 Then ActiveWindow.FreezePanes = False Target.Select Else Set Zelle = Target ActiveSheet.Cells(10, 6).Select ActiveWindow.FreezePanes = True Zelle.Select End If End Sub
![]() ![]() |
Betrifft: AW: Edit: Makro zum ein- und entfrieren
von: Rudi Maintaire
Geschrieben am: 06.08.2014 11:41:42
Hallo Robert,
die Select rufen aber wieder Worksheet_SelectionChange auf!!!
Gruß
Rudi
![]() ![]() |
Betrifft: AW: Edit: Makro zum ein- und entfrieren
von: Thms Drng
Geschrieben am: 06.08.2014 11:42:28
Hi Robert,
danke für Deine Mühe! Wenn ich das tue, stürzt mein Excel aber leider ab, sobald ich in eine Zelle klicke. Woran könnte das liegen? (Habe einige Spalten auch ausgeblendet, hängt es damit evtl. zusammen?)
![]() ![]() |
Betrifft: AW: Edit: Makro zum ein- und entfrieren
von: Robert
Geschrieben am: 06.08.2014 11:49:33
Danke Für den Hinweis Rudi, die endlosschleife hab ich übersehen.
Fixed:
Option Explicit Private Sub Worksheet_SelectionChange(ByVal Target As Range) Application.EnableEvents = False Dim Zelle As Range If Target.Column > 43 Then ActiveWindow.FreezePanes = False Target.Select Else Set Zelle = Target ActiveSheet.Cells(10, 6).Select ActiveWindow.FreezePanes = True Zelle.Select End If Application.EnableEvents = True End SubViele Grüße
![]() ![]() |
Betrifft: AW: Edit: Makro zum ein- und entfrieren
von: fcs
Geschrieben am: 06.08.2014 11:55:29
Hallo Thomas,
hier eine etwas kompliziertere Lösung, deren Code unter DieseArbeitsmappe eingefügt werden muss. Die Fixierung wird nicht bei jeder Zellselektion geändert, sonder nur wenn die aktive Zelle in einen anderen Spaltenbereich wandert.
Bei Roberts Lösung müssen im Makro vorübergehend die Ereignismakros deaktiviert werden, dann sollte Excel auch nicht mehr in eine Endlosschleife geraten und abstürzen.
Gruß
Franz
'Code im VBA-Editor unter "DieseArbeitsmappe" der Datei Option Explicit Private intStatusFrozen As Integer 'Merker für Fensterfixierung Private Const strSheet As String = "Tabelle1" 'Name des Blatts mit spezieller Fensterfixierung Private Sub prcMerkenStatus(ByVal objSh As Object) intStatusFrozen = 0 Select Case objSh.Name Case strSheet If Application.ActiveWindow.FreezePanes = False Then intStatusFrozen = 2 Else Select Case ActiveCell.Column Case Is < Range("AP1").Column intStatusFrozen = 1 Case Is >= Range("CT1").Column intStatusFrozen = 3 End Select End If Case Else 'do nothing End Select End Sub Private Sub prcFreezePaneYes(strZelle As String, objRange As Range) Dim objAktiv As Range Set objAktiv = ActiveCell Application.ActiveWindow.FreezePanes = False Range("A1").Select Range(strZelle).Select Application.ActiveWindow.FreezePanes = True objRange.Select objAktiv.Activate End Sub Private Sub prcFreezePaneNo(objRange As Range) Dim objAktiv As Range Set objAktiv = ActiveCell Application.ActiveWindow.FreezePanes = False objRange.Select objAktiv.Activate End Sub Private Sub Workbook_Open() 'Frozen-Status merken beim Öffnen der Datei Call prcMerkenStatus(objSh:=ActiveSheet) End Sub Private Sub Workbook_SheetActivate(ByVal Sh As Object) 'Frozen-Status merken wenn Blatt aktiviert/selektiert wird Call prcMerkenStatus(objSh:=Sh) End Sub Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) Select Case Sh.Name Case strSheet 'Fensterfixierung wechseln, wenn die aktive Zelle um bestimmte Spalten pendelt Application.EnableEvents = False Select Case ActiveCell.Column Case Is < Range("AP1").Column If intStatusFrozen <> 1 Then Call prcFreezePaneYes(strZelle:="G11", objRange:=Target) intStatusFrozen = 1 End If Case Is < Range("CT1").Column If intStatusFrozen <> 2 Then Call prcFreezePaneNo(objRange:=Target) intStatusFrozen = 2 End If Case Is >= Range("CT1").Column If intStatusFrozen <> 3 Then Call prcFreezePaneYes(strZelle:="A11", objRange:=Target) intStatusFrozen = 3 End If End Select Application.EnableEvents = True Case Else 'do nothing End Select End SubRoberts Lösung angepasst:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim Zelle As Range Application.EnableEvents = False Select Case Target.Column Case Is < Range("AP1").Column Set Zelle = Target ActiveWindow.FreezePanes = False Range("G11").Select ActiveWindow.FreezePanes = True Zelle.Select Case Is < Range("CT1").Column ActiveWindow.FreezePanes = False Target.Select Case Is >= Range("CT1").Column Set Zelle = Target ActiveWindow.FreezePanes = False Range("A11").Select ActiveWindow.FreezePanes = True Zelle.Select End Select Application.EnableEvents = True End Sub
![]() ![]() |
Betrifft: AW: Edit: Makro zum ein- und entfrieren
von: Thms Drng
Geschrieben am: 06.08.2014 12:21:35
Hallo Franz,
super! Herzlichen Dank für die Codes!!!
Beides funktioniert für meine Zwecke einwandfrei! Hoffentlich bin ich nicht der einzige der davon profitieren kann/wird!
Beste Grüße
Thomas
![]() |