Tipp 0493 Zellgruppierungen mit Tabellenschutz
Autor/Einsender:
Datum:
  Alexander Fross
09.05.2006
Entwicklungsumgebung:   Excel 2000
Excel bietet keine Standard-Eigenschaft an, mit der man beim Aktivieren des Tabellenschutzes dem Anwender die Möglichkeit bieten kann, die Zeilen- und Spaltengruppierungen (Gliederung) weiterhin zu benutzen. Dies kann nur mit VBA realisiert werden, indem man bei jedem Öffnen der Arbeitsmappe die Eigenschaft EnableOutlining der Tabelle auf True setzt. Des Weiteren muss beim Aktivieren des Tabellenschutzes der Parameter UserInterfaceOnly ebenfalls auf True gesetzt werden. Nur wenn diese Kriterien erfüllt sind, kann der Anwender bei aktivem Tabellenschutz die Gruppierungen ein- und ausblenden.
Da die Eigenschaft EnableOutlining beim Schließen der Arbeitsmappe automatisch auf False zurückgesetzt wird, muss dieses Prozedere bei jedem Öffnen der Arbeitsmappe wiederholt werden.
Um dem Anwender bezüglich der Gruppierungen ein besseres Handling zu verschaffen, kann in diesem Beispiel die Zeilengruppierungen mit einem Doppelklick der Maus ein- bzw. ausgeblendet werden. Das gleiche funktioniert bei den Spaltengruppierungen mit einem Rechtsklick der Maustaste. Aufgrund dieser Funktionalität eignet sich dieser Code unter Umständen nur für Tabellen, die einzig für die Ansicht jedoch nicht für die Eingabe bestimmt sind, da Rechtsklick und Doppelklick nur noch beschränkt funktionieren.
Code im Codebereich von DieseArbeitsmappe bzw. ThisWorkbook
 
Option Explicit

Private Const sPASSWORD     As String = "Passwort"
Private bCellDragAndDrop    As Boolean

Private Sub Workbook_Open()
  Dim objWks As Worksheet

  On Error GoTo ErrPassword
  For Each objWks In ThisWorkbook.Worksheets
    With objWks
      .Unprotect Password:=sPASSWORD
      .EnableOutlining = True
      .Protect Password:=sPASSWORD, UserInterfaceOnly:=True
    End With
  Next objWks

  ThisWorkbook.Saved = True
  Exit Sub

ErrPassword:
  MsgBox "Ein unbekannter Fehler ist aufgetreten!" & _
      String(2, vbCr) & "Quelle" & vbTab & Err.Source & vbCr & _
      "Fehler" & vbTab & Err.Description, vbCritical, _
      "Fehler-Nr. " & Err.Number
End Sub

Private Sub Workbook_Activate()
  bCellDragAndDrop = Application.CellDragAndDrop
  Application.CellDragAndDrop = False
End Sub

Private Sub Workbook_Deactivate()
  Application.CellDragAndDrop = bCellDragAndDrop
End Sub

Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, _
      ByVal Target As Range, Cancel As Boolean)
  Change_Group Sh, Target.EntireColumn, Cancel
End Sub

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, _
      ByVal Target As Range, Cancel As Boolean)
  Change_Group Sh, Target.EntireRow, Cancel
End Sub

Private Sub Change_Group(ByRef rSh As Object, _
      ByRef rRng As Range, ByRef rbCancel As Boolean)

  If TypeOf rSh Is Worksheet Then
    On Error GoTo ErrWrongPassword
    rSh.Unprotect Password:=sPASSWORD
    On Error Resume Next

    rRng.ShowDetail = Not rRng.ShowDetail
    If Err.Number = 0 Then
      rbCancel = True
    End If

    rSh.Protect Password:=sPASSWORD, UserInterfaceOnly:=True
  End If

ErrWrongPassword:
End Sub
 

Windows-Version
95
98
ME
NT
2000
XP
Vista
Win 7
Excel-Version
95
97
2000
2002 (XP)
2003
2007
2010


Download  (41,1 kB) Downloads bisher: [ 416 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Projekte | Tutorials | API-Referenz | VB-/VBA-Tipps | Komponenten | Bücherecke | VB/VBA-Forum | VB.Net-Forum | DirectX-Forum | Foren-Archiv | DirectX | VB.Net-Tipps | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Dienstag, 30. August 2011