Comment verrouiller des cellules, mais permettent de filtrage et de tri
J'utilise le code suivant pour verrouiller le contenu de certaines cellules
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
Il verrouille le contenu de ces colonnes spécifiques. Le problème est que les utilisateurs ne peuvent pas trier, ni filtre, ni appliquer des bordures aux cellules, puisque celles-Excel éléments de menu sont désactivées.
Je pensais que le AllowSorting:=True
, AllowFiltering:=True
et DrawingObjects:=True
permettrait que de la même manière le AllowFormattingColumns:=True
et AllowFormattingRows:=True
permis de redimensionnement.
- Je vous suggère de relire l'aide d'Excel om
Worksheet Proptect
, particlarly concernant le Permettre paramètres wrt protégé des feuilles de calcul et des cellules verrouillées. AllowSorting: "Chaque cellule de la plage de tri doit être déverrouillé ou non protégés" AllowFiltering: "les Utilisateurs peuvent changer les critères de filtre, mais ne pouvez pas activer ou désactiver un filtre automatique" - Merci, c'est triste, parce que j'ai besoin d'être en mesure de bloquer certains contenus mais de permettre à l'utilisateur de trier et de filtrer. Des idées?
- 1.) assurez-vous que votre plage ne se chevauchent pas avec les autres gammes. 2.) déverrouiller toutes les cellules dans la feuille avant d'appliquer un verrou à votre portée. 3.) "Les cellules pour être filtrée doit être déverrouillé, lorsque la feuille est protégée." ...donc il suffit de ne pas inclure ces "cellules de filtre" dans le cadre de votre verrouillé gamme. msdn.microsoft.com/en-us/library/office/ff839866.aspx
Vous devez vous connecter pour publier un commentaire.
Il y a un certain nombre de personnes à cette difficulté. La réponse majoritaire est que vous ne pouvez pas protéger le contenu de l'édition, tout en permettant libre de tri. Vos options sont les suivantes:
1) Permettre l'édition et de tri 🙁
2) la demande de protection et de créer des boutons avec un code pour trier à l'aide de VBA. Il y a d'autres posts expliquant comment faire. Je pense qu'il y a deux méthodes, soit (1) obtenir le code d'ôter la protection de la feuille, appliquer le tri, puis re-protéger la feuille, ou (2) de la feuille protégée à l'aide d'
UserInterfaceOnly:=True
.3) Lorie est une réponse qui ne permet pas aux utilisateurs de sélectionner des cellules (https://stackoverflow.com/a/15390698/269953)
4) Une solution que je n'ai pas vu est discuté de l'utilisation de VBA pour fournir une certaine protection de base. Par exemple, de détecter et d'annuler les changements à l'aide de
Worksheet_Change
. C'est loin d'être une solution idéale, cependant.5) Vous pouvez garder la feuille protégée lorsque l'utilisateur est de sélectionner les données et non protégés lorsque l'utilisateur a l'en-tête est sélectionné. Cela laisse d'innombrables façons les utilisateurs pourraient gâcher les données tout en étant aussi à l'origine de certains problèmes d'utilisation, mais au moins, réduit les chances de satanés co-travailleurs à la légère apporter des modifications non désirées.
Cela a été un problème majeur pour moi, et j'ai trouvé le lien suivant avec un relativement simple réponse. Grâce Voyager!!!
Remarque que j'ai nommé la plage, je voulais que d'autres à être en mesure de trier
http://answers.yahoo.com/question/index?qid=20090419000032AAs5VRR
Je suis juste venu avec une façon délicate d'obtenir presque la même fonctionnalité. Au lieu de la protection de la feuille de façon normale, l'utilisation d'un gestionnaire d'événements pour annuler tout ce que l'utilisateur essaie de faire.
Ajouter les éléments suivants à la feuille de calcul du module:
Si l'utilisateur ne fait rien pour changer une cellule verrouillée, l'action obtiendrez immédiatement annulée. La désactivation temporaire des événements est de garder la ruine elle-même à partir du déclenchement de l'événement, résultant dans une boucle infinie.
De tri et de filtrage de ne pas déclencher le Changement de l'événement, de sorte que ces fonctions restent activés.
Noter que cette solution empêche de changer ou de compensation, le contenu de la cellule, mais n'empêche pas de changement de formats. Déterminée, l'utilisateur peut contourner ce problème en définissant simplement les cellules pour être déverrouillé.
locked
drapeau. Cela devrait être la réponseVoici un article qui explique le problème et la solution avec beaucoup plus de détail:
Le tri des Cellules Verrouillées dans des Feuilles de calcul Protégées
La chose à comprendre, c'est que le but de verrouillage des cellules pour les empêcher d'être changé, et le tri en permanence les changements de valeurs de cellule. Vous pouvez écrire une macro, mais une bien meilleure solution est d'utiliser l'option "Permettre aux Utilisateurs de Modifier des Plages". Cela rend les cellules modifiables afin de tri peuvent travailler, mais parce que les cellules sont toujours techniquement verrouillé, vous pouvez empêcher les utilisateurs de choisir.
Lorie la réponse est bonne, mais si un utilisateur sélectionne une plage qui contient de verrouiller et de déverrouiller les cellules, les données de l'verrouillé/protection pour les cellules peuvent être supprimés.
Isaac réponse est grande, mais ne fonctionne pas si l'utilisateur met en évidence une gamme qui a à la fois de verrouiller et de déverrouiller les cellules.
J'ai modifié Isaac code un peu pour annuler les modifications si une des cellules dans la plage cible est verrouillée. Il affiche également un message expliquant pourquoi l'action a été annulée. Combiné avec Lorie réponse, j'ai été en mesure d'atteindre le résultat souhaité de pouvoir trier/filtrer une feuille protégée, tout en permettant à l'utilisateur d'apporter des modifications à un non protégés cellule.
Suivez les instructions de Lorie réponse, puis placez le code suivant dans la feuille de calcul du module:
Si le filtrage automatique fait partie d'un sous-programme de l'opération, vous pouvez utiliser
momentanément ôter la protection de la feuille, filtre les cellules, et de protéger de nouveau par la suite.
Je sais que c'est super vieux, mais chaque fois que je google cette question. Vous pouvez ôter la protection de la plage comme dans ces cellules, puis ajouter des données de validation pour les protégés de cellules pour faire référence à quelque chose de scandaleux comme "423fdgfdsg3254fer" et puis, si les utilisateurs essaient de modifier n'importe quel de ces cellules, ils sont incapables de le faire, mais vous êtes de tri et de filtrage fonctionne maintenant.
C'est un très vieux, mais encore très utile thread. Je suis venu ici récemment avec le même problème. Je suggère à la protection de la feuille lorsque cela est approprié et déprotéger lorsque le filtre de ligne (par exemple de la Ligne 1) est sélectionné. Ma solution n'utilisez pas de protection par mot de passe - je n'ai pas besoin (sa sauvegarde, et non pas une fonction de sécurité). Je ne peux pas trouver un gestionnaire d'événement qui reconnaît la sélection d'un bouton filtre - donc j'ai donné l'instruction à mes utilisateurs de choisir d'abord le filtre de la cellule, puis cliquez sur le bouton filtre. Voici ce que je préconise, (j'ai seulement le changement de la protection s'il doit être changé, ce qui peut ou ne peut pas gagner du temps - je ne sais pas, mais il "se sent" à droite):
Dans Excel 2007, déverrouiller les cellules que vous voulez entrez vos données. Aller à l'Examen
Pas de VB nécessaire