Erreur 1004 lorsque la Plage de réglage.Verrouillé
- Je obtenir le fourre-tout " erreur d'exécution 1004, "impossible de définir la propriété Locked de la Gamme de classe" lorsque, essayant ainsi de définir la Verrouillé
propriété d'un objet Range. Le code ressemble à ceci:
that_goddamn_sheet.Unprotect
; Determine if we should proceed
that_goddamn_range.Locked = True
; Do more stuff
that_goddamn_sheet.Protect
Lorsque j'ai mis un point d'arrêt sur la ligne et essayez d'interroger la valeur de that_goddamn_range.Locked
de la fenêtre, cela fonctionne sans problème, mais la définition qu'il échoue.
Si, cependant, je lance that_goddamn_range.Select
, briser la macro, ôter la protection de la feuille (il se reprotected automatiquement sur le changement de sélection) puis clic droit, choisir Propriétés, passer à l'onglet Protection et de cocher Verrouillé puis confirmer, les choses sont d'accord cependant.
Ce qui pourrait mal se passer?
Bon point, inclus dans la question.
OriginalL'auteur badp | 2012-02-07
Vous devez vous connecter pour publier un commentaire.
Voici une explication complète:
Généralement, il existe deux causes de cette erreur: tentative de modification d'une cellule de Verrouillé de propriété sur une feuille protégée et/ou tenter de modifier le Verrouillé propriété d'une seule cellule dans une fusion de gamme.
Dans le premier cas, vous pouvez déverrouiller la feuille ou de l'ensemble UserInterfaceOnly de protection, ce qui est fortement recommandé car ensuite, vous n'avez pas de gâchis avec à plusieurs reprises de déverrouillage/verrouillage.
À l'égard des cellules fusionnées, vous ne pouvez pas verrouiller une cellule unique qui est le cadre d'une fusion de gamme, mais il existe des options:
Si vous êtes en utilisant des cellules à la notation de l'adresse de référence de la cellule/plage,
Range("A1").Locked = True
puis de référence de l'ensemble fusionné gamme à la place:
Range("A1:A3").Locked = True 'where "A1:A3" is the entire merged range
Si vous utilisez une plage nommée pour un ensemble de cellules fusionnées, par défaut il sera défini en référence à la première de la fusion de cellules. Vous pouvez soit modifier sa définition pour inclure l'ensemble fusionné portée ou l'utilisation de ses MergeArea bien référencer son associé fusionné gamme:
Range(“SomeNamedRange”).MergeArea.Locked = True
Mais notez que vous ne pouvez pas le faire à la fois depuis le MergeArea propriété est, apparemment, pas défini pour une gamme qui n'est pas stricte sous-ensemble d'une plus grande zone fusionnée!
Bien sûr, vous pouvez toujours annuler la fusion la fusion de gamme avant de définir la propriété Locked une cellule, puis re-fusionner par la suite, mais je n'ai jamais vu une situation dans laquelle l'une de ces deux solutions n'était pas suffisant (et plus propre).
OriginalL'auteur pstraton
La feuille, pour une raison quelconque, reprotected lui-même au moyen de la méthode. Déprotéger de nouveau immédiatement avant le réglage de la
Locked
bien corrigé mon problème.En fait j'ai eu plusieurs plages que j'ai eu besoin de s'enfermer dans une rangée, et avait pour ôter la protection de la feuille avant chaque changement de propriété.
OriginalL'auteur badp
Vous ne pouvez pas verrouiller une cellule qui fait partie d'une gamme de cellules fusionnées, sauf si elle est le coin supérieur gauche de la cellule. Les ouvrages suivants, pour une cellule ou une zone fusionnée de cellules.
OriginalL'auteur Scot Norris
J'ai eu le même problème et a essayé de cacher manuellement les cellules, et recevez l'avertissement suivant:
"Impossible de déplacer des objets en dehors de la feuille."
Mon problème était que certains commentaires dans les cellules de la même feuille. Après avoir supprimer tous les commentaires de la feuille, le code s'exécute.
Mon code trouver la ligne à l'aide de la casse dans une Colonne utilisée uniquement pour ça (parce que j'ai besoin d'insérer des lignes et de la Colonne "B" est ma référence pour identifier la ligne).
Mon Code.
Lignes((WorksheetFunction.Match(1, Range("B:B"), 0)) - 1 & ":" & (WorksheetFunction.Match(13, Range("B:B"), 0)) + 15).EntireRow.Hidden = True
OriginalL'auteur Erik Teixeira