Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
772to776
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
772to776
772to776
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Tabellenschutz in Abhängigkeit des Zellenmusters

Tabellenschutz in Abhängigkeit des Zellenmusters
15.06.2006 11:04:21
Fritz
Hallo VBA-Kenner,
ich freue mich über eure Hilfe.
In einer Datei habe ich in einem Tabellenblatt, das mit dem Passwort "xxx" geschützt ist, einzelne Zellen vom Schutz ausgenommen. In diese Tabelle werden immer wieder neue Daten eingegeben. Die Zellen, in denen eine Dateneingabe noch möglich ist, sind mit dem Zellmuster "hellgelb" hinterlegt. Ich habe diese Zellen jedoch mit Hilfe der bedingten Formatierung so gestaltet, dass sie sobald sie Werte (Zahlen) enthalten, als Zellmuster "keine Farbe" annehmen.
Nun möchte ich erreichen, dass immer wenn ich die Tabelle schließe, auch diese Zellen zusätzlich geschützt werden, wenn zwischenzeitlich Daten (Zahlen) in die Zellen eingetragen wurden (die Zellen statt des Grundmusters hellgelb nun als Folge der bedingten Formatierung "keine Farbe" enthalten).
Ich hoffe, dass ihr mit meinen Ausführungen klarkommt und sich mein Vorhaben so realisieren lässt.
Besten Dank für jedwede Unterstützung.
Gruß
Fritz

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabellenschutz in Abhängigkeit des Zellenmuste
15.06.2006 11:18:05
Josef Ehrensberger
Hallo Fritz!
Das gehört wohl zum Thema von vorhin.
Dann probier mal so.
' **********************************************************************
' Modul: DieseArbeitsmappe Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim WS As Worksheet

For Each WS In ThisWorkbook.Sheets
  WS.Unprotect "XXX"
  SchutzZelle WS
  WS.Protect DrawingObjects:=True, _
    Contents:=True, _
    Scenarios:=True, _
    Password:="XXX"
Next

End Sub



Private Sub SchutzZelle(objSh As Worksheet)
Dim rng As Range, r As Range

On Error Resume Next
Set rng = objSh.UsedRange.SpecialCells(xlCellTypeConstants)
On Error GoTo 0

If Not rng Is Nothing Then
  For Each r In rng
    If Not r.Locked And r.Interior.ColorIndex = 36 And Len(r) > 0 Then r.Locked = True
  Next
End If

End Sub


Gruß Sepp


Anzeige
AW: Tabellenschutz in Abhängigkeit des Zellenmuste
15.06.2006 12:17:28
Fritz
Hallo Sepp,
vielen Dank.
Mein VBA-Wissen ist derart schlecht, dass sich für mich leider Rückfragen ergeben.
Muss der Code in ein Modul oder in die betreffende Tabelle?
Vielleicht habe ich mein Vorhaben auch unzureichend beschrieben!
Ich will erreichen, dass für eine Tabelle, die mit dem Passwort "xxx" geschützt ist, beim Verlassen der Tabelle (d.h. beim Wechsel in ein anderes Tabellenblatt) der Schutz neu gesetzt, d.h. "aktualisiert" wird, so dass zunächst der Schutz aufgehoben werden muss. Danach sollte der Schutz neu gesetzt werden (mit dem alten Passwort), zuvor sollten jedoch alle diejenigen Zellen vom Schutz ausgenommen bleiben, die zu diesem Zeitpunkt noch als Zellmuster die Farbe "hellgelb" aufweisen.
Beim nächsten Aufruf der Tabelle werden dann möglicherweise weitere dieser Zellen mit Daten (Zahlen) beschrieben, so dass diese Zellen danach aufgrund der bedingten Formatierung als Zellmuster "keine Farbe" enthalten. Diese Zellen müssten dann beim Wechsel des Tabellenblatts eben neu in den Zellschutz einbezogen werden.
Gruß
Fritz
Anzeige
AW: Tabellenschutz in Abhängigkeit des Zellenmuste
15.06.2006 12:26:41
Reinhard
Hi Fritz,
...Muss der Code in ein Modul oder in die betreffende Tabelle?...
Weder noch, im Editor Doppelklick auf "Diese Arbeitsmappe"...
Gruß
Reinhard
ps: Ich freue mich über eine Rückmeldung ob diese Antwort hilfreich war oder nicht..
Vielen Dank!
15.06.2006 13:05:47
Fritz
Hallo Reinhard,
ich danke Dir für Deine Hilfe.
Gruß
Fritz
AW: Tabellenschutz in Abhängigkeit des Zellenmuste
15.06.2006 12:39:46
Josef Ehrensberger
Hallo Fritz!
Das geht so.
' **********************************************************************
' Modul: DieseArbeitsmappe Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Dim rng As Range, r As Range

With Sh
  If TypeName(Sh) = "Worksheet" Then
    .Unprotect "XXX"
    On Error Resume Next
    Set rng = .UsedRange.SpecialCells(xlCellTypeConstants)
    On Error GoTo 0
    
    If Not rng Is Nothing Then
      For Each r In rng
        If Not r.Locked And r.Interior.ColorIndex = 36 And Len(r) > 0 Then
          r.Locked = True
        ElseIf r.Interior.ColorIndex = 36 And Len(r) = 0 Then
          r.Locked = False
        End If
      Next
    End If
    .Protect "XXX"
  End If
End With
End Sub


Der Code gehört in "DieseArbeitsmappe"!

Gruß Sepp


Anzeige
AW: Tabellenschutz in Abhängigkeit des Zellenmuste
15.06.2006 13:11:59
Fritz
Hallo Sepp,
Vielen Dank! Klappt soweit super und wie gewünscht. Einzige Ausnahme: In der Tabelle befindet sich eine Zelle ("G1"), mit dem gleichen Zellmuster ("hellgelb"). In diese Zellen ist ein Zahlenwert enthalten. Dieser Wert soll nach wie vor geändert werden können. Bei der jetzigen Lösung wird die Zelle jedoch in den Schutz einbezogen, obwohl sie das Zellmuster "hellgelb" enthält. Vermutlich wegen des Eintrags in der Zelle.
Könnte man das noch ändern? Wäre prima.
Ansonsten wie gewünscht!! Einfach Klasse eure Unterstüzung.
Gruß
Fritz
Noch eine Auffälligkeit
15.06.2006 13:28:02
Fritz
Hallo Sepp,
inzwischen ist mir noch etwas aufgefallen. Wenn ich die Tabelle aufrufe, ist der Schutz wie gewünscht gesetzt. Gebe ich nun in eine der vom Schutz ausgenommenen Zellen etwas ein (Zahl), dann wird der Blattschutz für die gesamte Tabelle aufgehoben. Das war eigentlich nicht beabsichtigt. Woran liegt das? Wie könnte man das ändern?
Besten Dank im Voraus.
Gruß
Fritz
Anzeige
AW: Noch eine Auffälligkeit
15.06.2006 18:08:52
Josef Ehrensberger
Hallo Fritz!
Für das Aufheben des Blattschutzes bei der Eingabe, kann mein Code nicht
verantwortlich sein.
Das andere Problem kann man so umgehen.
' **********************************************************************
' Modul: DieseArbeitsmappe Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
Dim rng As Range, r As Range
Dim bCheck As Boolean

With Sh
  If TypeName(Sh) = "Worksheet" Then
    .Unprotect "XXX"
    
    On Error Resume Next
    Set rng = .UsedRange.SpecialCells(xlCellTypeConstants)
    On Error GoTo 0
    
    If Not rng Is Nothing Then
      For Each r In rng
        On Error Resume Next
        bCheck = r.FormatConditions(1).Formula1 <> ""
        On Error GoTo 0
        If bCheck Then
          If Not r.Locked And r.Interior.ColorIndex = 36 And Len(r) > 0 Then
            r.Locked = True
          ElseIf r.Interior.ColorIndex = 36 And Len(r) = 0 Then
            r.Locked = False
          End If
        End If
      Next
    End If
    
    .Protect "XXX"
  End If
End With
End Sub


Gruß Sepp


Anzeige
AW: Noch eine Auffälligkeit
15.06.2006 19:36:27
Fritz
Hallo Sepp,
dein Code funktioniert wie gewünscht. Herzlichen Dank!
Zu meinem zweiten Änderungswunsch. Wenn die Aufhebung des Blattschutzes nicht in deinem Code begründet ist, kann es nur der nachfolgende Code sein, den mir ein anderer hilfsbereiter Forumsbesucher vor einiger Zeit geschrieben hat und der sich im entsprechenden Tabellenblatt befindet.
Lässt sich mein Wunsch angesichts dieser Tatsache überhaupt noch realisieren?
Gruß
Fritz

Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect Password:="XXX"
Dim SuBe As Range, _
s As String
If Target.Address <> "$G$1" Then Exit Sub
s = Target.Text
Set SuBe = Range("H1:CU1").Find(What:=s, _
After:=Range("CU1"), LookAt:=xlWhole)
If Not SuBe Is Nothing Then
Application.EnableEvents = False       'Ereignis AUS
Range("CV1:CW50").Value = _
Range(Cells(1, SuBe.Column - 1), Cells(50, SuBe.Column)).Value
Application.EnableEvents = True        'Ereignis EIN
Set SuBe = Nothing
Else
MsgBox "Suchbegriff '" & s & "' nicht gefunden !", 64, _
"Dezenter Hinweis für " & Application.UserName & ":"
End If
ActiveSheet.Protect Password:="XXX"
End Sub

Anzeige
AW: Noch eine Auffälligkeit
15.06.2006 19:56:17
Josef Ehrensberger
Hallo Fritz!
Den Code ein bisschen umgestellt, dann sollte es laufen.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim SuBe As Range, s As String

If Target.Address = "$G$1" Then
  ActiveSheet.Unprotect Password:="XXX"
  s = Target.Text
  Set SuBe = Range("H1:CU1").Find(What:=s, _
    After:=Range("CU1"), LookAt:=xlWhole)
  If Not SuBe Is Nothing Then
    Application.EnableEvents = False 'Ereignis AUS
    Range("CV1:CW50").Value = _
      Range(Cells(1, SuBe.Column - 1), Cells(50, SuBe.Column)).Value
    Application.EnableEvents = True 'Ereignis EIN
    Set SuBe = Nothing
  Else
    MsgBox "Suchbegriff '" & s & "' nicht gefunden !", 64, _
      "Dezenter Hinweis für " & Application.UserName & ":"
  End If
  ActiveSheet.Protect Password:="XXX"
End If

End Sub


Gruß Sepp


Anzeige
Einfach Klasse! Danke Sepp! o.w.T.
15.06.2006 20:17:18
Fritz

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige