2012-04-17 7 views
11

ich den folgenden Code verwenden, den Inhalt bestimmter Zellen zu sperrenVBA Excel - Wie spezifische Zellen zu sperren, sondern Filterung erlauben und Sortierung

Sub LockCell(ws As Worksheet, strCellRng As String) 
    With ws 
    .Unprotect 
    .Cells.Locked = False 
    .Range(strCellRng).Locked = True 
    .Protect Contents:=True, AllowFormattingCells:=True, AllowFormattingColumns:=True, AllowFormattingRows:=True, AllowInsertingColumns:=True, AllowInsertingRows:=True, AllowSorting:=True, AllowFiltering:=True, AllowUsingPivotTables:=True, DrawingObjects:=True 
    End With 
End Sub 

Es funktioniert gut auf den Inhalt dieser spezifischen Spalten sperren. Das Problem besteht darin, dass Benutzer, die an der Kalkulationstabelle selbst arbeiten, weder sortieren noch filtern oder Ränder auf die Zellen anwenden können, da diese Excel-Menüelemente deaktiviert sind. Ich dachte, die AllowSorting:=True, AllowFiltering:=True und DrawingObjects:=True würde erlauben, dass auf die gleiche Weise die AllowFormattingColumns:=True und AllowFormattingRows:=True Größenänderung erlaubt.

Vielen Dank im Voraus für Ihre Hilfe.

Grüße, Ronald

+1

Ich empfehle Ihnen, lesen Sie die Excel-Hilfe om 'Arbeitsblatt Proptect', insbesondere in Bezug auf die _Allow_ Parameter geschützt protected _worksheets_ und gesperrt _cells_. AllowSorting: "Jede Zelle im Sortierbereich muss entsperrt oder ungeschützt sein" AllowFiltering: "Benutzer können Filterkriterien ändern, aber keinen automatischen Filter aktivieren oder deaktivieren" –

+0

Danke, das ist aber traurig, weil ich in der Lage sein muss, einige zu blockieren Inhalt aber erlauben Benutzer zu sortieren und zu filtern. Irgendwelche Ideen? –

+0

1.) Stellen Sie sicher, dass sich Ihr Bereich nicht mit anderen Bereichen überschneidet. 2.) entsperren Sie alle Zellen im Blatt, bevor Sie eine Sperre auf Ihren Bereich anwenden. 3.) "Die zu filternden Zellen müssen entsperrt sein, wenn das Blatt geschützt ist." ... also schließen Sie diese Filterzellen nicht als Teil Ihrer gesperrten Reichweite ein. https://msdn.microsoft.com/en-us/library/office/ff839866.aspx –

Antwort

5

Das war für mich ein großes Problem und ich fand den folgenden Link mit einer relativ einfachen Antwort. Vielen Dank Voyager !!!

Bitte beachte, dass ich den Bereich namens wollte ich andere in der Lage sein, zu sortieren

  • Ungeschützt Arbeitsblatt
  • Zum „Schutz“ --- „Benutzer dürfen Bereiche bearbeiten“ (wenn Excel 2007 " Review“tab)
  • Add "Neu" Bereich
  • den Bereich auswählen, die Sie erlauben möchten, dass Benutzer
  • Klicken Sie sortieren "Blatt schützen"
  • Diesmal * nicht zulassen "gesperrte Zellen" Benutzer mit dieser Schwierigkeit **
  • OK

http://answers.yahoo.com/question/index?qid=20090419000032AAs5VRR

7

Es gibt eine Reihe von Menschen zu wählen. Die vorherrschende Antwort ist, dass Sie den Inhalt nicht vor dem Bearbeiten schützen können, während Sie ungehindert sortieren können. Ihre Optionen sind:

1) Bearbeitung zulassen und :(

2) Tragen Sie Schutz Sortierung und erstellen Schaltflächen mit Code zu sortieren VBA verwenden. Es gibt andere Beiträge, die erklären, wie man das macht. Ich denke, es gibt zwei Methoden, entweder (1) den Code zum Aufheben des Schutzes des Blattes zu erhalten, die Sortierung anzuwenden, dann das Blatt erneut zu schützen oder (2) das Blatt mit UserInterfaceOnly:=True zu schützen.

3) Lorie Antwort, die Benutzer nicht zulässt, dass Zellen (https://stackoverflow.com/a/15390698/269953)

4) Eine Lösung auszuwählen, die ich diskutiert nicht gesehen haben, ist VBA mit einigen grundlegenden Schutz zu bieten. Beispielsweise können Sie Änderungen mithilfe von Worksheet_Change erkennen und rückgängig machen. Es ist jedoch bei weitem keine ideale Lösung.

5) Sie können das Blatt geschützt halten, wenn der Benutzer die Daten auswählt, und ungeschützt, wenn der Benutzer die Kopfzeile ausgewählt hat. Dies lässt unzählige Wege, auf denen die Nutzer die Daten durcheinander bringen könnten, und verursacht auch einige Usability-Probleme, reduziert aber zumindest die Wahrscheinlichkeit, dass lästige Mitarbeiter gedankenlos unerwünschte Änderungen vornehmen.

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    If (Target.row = HEADER_ROW) Then 
     wsMainTable.Unprotect Password:=PROTECTION_PASSWORD 
    Else 
     wsMainTable.Protect Password:=PROTECTION_PASSWORD, UserInterfaceOnly:=True 
    End If 
End Sub 
1

Hier ist ein Artikel, der das Problem und Lösung mit vielen ausführlicher erklärt:

Sorting Locked Cells in Protected Worksheets

Dem, was zu verstehen ist, dass der Zweck der Sperrzellen ist zu verhindern, dass sie vor Änderungen, und das Sortieren ändert permanent die Zellenwerte. Sie können ein Makro schreiben, aber eine viel bessere Lösung ist die Verwendung der Funktion "Benutzern erlauben, Bereiche zu bearbeiten". Dadurch können die Zellen bearbeitet werden, so dass das Sortieren funktioniert. Da die Zellen jedoch technisch gesperrt sind, können Sie verhindern, dass Benutzer sie auswählen.

2

Ich habe gerade einen kniffligen Weg gefunden, fast die gleiche Funktionalität zu bekommen. Anstatt das Blatt auf die normale Weise zu schützen, verwenden Sie einen Ereignishandler, um alles rückgängig zu machen, was der Benutzer versucht.

Fügen Sie den folgenden um das Modul des Arbeitsblatt:

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Locked = True Then 
     Application.EnableEvents = False 
     Application.Undo 
     Application.EnableEvents = True 
    End If 
End Sub 

Wenn der Benutzer etwas tut, eine Zelle zu ändern, die gesperrt ist, wird die Aktion sofort rückgängig gemacht bekommen. Die temporäre Deaktivierung von Ereignissen soll verhindern, dass das Rückgängigmachen dieses Ereignisses selbst ausgelöst wird, was zu einer Endlosschleife führt.

Sortierung und Filterung lösen das Ereignis Change nicht aus, daher bleiben diese Funktionen aktiviert.

Beachten Sie, dass diese Lösung das Ändern oder Löschen von Zelleninhalten verhindert, aber nicht das Ändern von Formaten verhindert. Ein bestimmter Benutzer könnte sich darum kümmern, indem er einfach die Zellen festlegt, die entsperrt werden sollen.

+0

Genau das, was ich gesucht habe - das ist ein netter Trick, um die "gesperrte" Flagge zu verwenden.Dies sollte die Antwort sein –

0

Wenn die autofiltering Teil eines Subroutine Betrieb ist, könnten Sie

BioSum.Unprotect "letmein" 

'<Your function here> 

BioSum.Cells(1, 1).Activate 
BioSum.Protect "letmein" 

, um vorübergehend das Blatt aufzuheben, filtern Sie die Zellen, und danach Erneut schützen verwenden.

-1

Entsperren Sie in Excel 2007 die Zellen, in die Sie Ihre Daten eingeben möchten. Gehen

> Protect Sheet 
> Select Locked Cells (already selected) 
> Select unlocked Cells (already selected) 
> (and either) select Sort (or) Auto Filter 

Kein VB

+1

Die Frage war, wie diese Aktion mit VBA zu tun. Deine Antwort ist falsch – Dragos

0

zur Überprüfung erforderlich Ich weiß, das Super alt ist, kommt aber immer dann, wenn ich dieses Thema Google. Sie können den Schutzbereich wie in den obigen Zellen angegeben aufheben und dann den ungeschützten Zellen eine Datenvalidierung hinzufügen, um etwas Unerhörtes wie "423fdgfdsg3254fer" zu referenzieren. Wenn Benutzer dann versuchen, diese Zellen zu bearbeiten, können sie das nicht, aber Sie sortieren und das Filtern funktioniert jetzt.

Verwandte Themen