VBA Excel - Comment verrouiller des cellules spécifiques mais permettre le filtrage et le 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 fonctionne bien verrouiller le contenu de ces colonnes spécifiques. Le problème est que le travail sur la feuille de calcul elle-même, les utilisateurs ne peuvent pas trier ni filtre ni d'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 remercie d'avance pour votre aide.
Ce qui concerne,
Ronald
source d'informationauteur Ronald Valdivia
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.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é.
Voici 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.
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.
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:
Dans Excel 2007, déverrouiller les cellules que vous voulez entrez vos données. Aller à l'Examen
Pas de VB nécessaire