J'ai une feuille qui présente certaines cellules verrouillées et certaines cellules d'entrée / déverrouillées. Étant donné que les cellules d'entrée sont formatées, je ne leur permettent que de coller des valeurs (faites cela avec une simple macro à coller et attribué la commande ctrl kbd> v kbd>) cependant, cette macro me laisse Coller des valeurs dans des cellules verrouillées dans lesquelles j'ai des formules qui deviennent écrasées. Si je fais une copie pâte spéciale ( alt kbd> e kbd> + s kbd> S + v kbd>) Je ne suis pas autorisé à coller si cela affecte les cellules verrouillées. La raison pour laquelle j'ai besoin de la macro avec le Ctrl V kbd> pour coller uniquement est parce que mes utilisateurs ne savent pas à copier la pâte spéciale mais ne connaissent que la norme Ctrl kbd> v kbd>, qui dans le cas sans macro détruit le format. P> Toute aide sur la façon dont je peux limiter mon Ctrl kbd> V kbd> macro à ne pas coller des valeurs à des cellules déverrouillées? P> La macro que je lance avec Ctrl kbd> v kbd>: p>
3 Réponses :
Sans voir votre code, tout ce que nous pouvons vous donner est un extrait. Fondamentalement, vous pouvez tester si elle est verrouillée avec p>
Ceci retournera un ActiveCell.Locked code> p>
vrai code> si c'est le cas. Substituez votre identification de la cellule pour
ActiveCell CODE>. P>
.Olocked code> peut être dans trois états:
true code> si toutes les cellules de la plage sont verrouillées,
false code> si toutes les cellules de la plage sont déverrouillées et
null code> s'il existe un mélange de cellules verrouillées et déverrouillées dans la plage.
Merci pour la suggestion. Ce que j'ai: - l'utilisateur peut copier à partir de n'importe quel Excel une sélection - L'utilisateur peut coller des valeurs en appuyant sur Ctrl + V sur Ctrl + V sur des cellules déverrouillées uniquement - le code doit vérifier si la plage de sélection est en colle uniquement sur les cellules déverrouillées uniquement - si la plage de sélection affecte une cellule verrouillée. Une erreur d'erreur doit apparaître - si la plage de sélection n'affecte que des cellules déverrouillées, copiez les valeurs que j'ai la macro suivante que je lance avec Ctrl + V: sous-pâte () Sélection de la pâte Spéciale: = xlpastevalues fin
Vous devriez éditer votre message pour montrer que Macro afin que quiconque en examine cela puisse la voir dans votre question, non enfoui dans un commentaire.
@AJD Oui, je pensais avoir collé à une seule cellule. Mauvaise hypothèse!
Une autre approche n'est pas de sur-traduire Dans la feuille de calcul que vous souhaitez contrôler, placez le gestionnaire d'événements suivant: P > ctrl-v code> mais pour utiliser un menu contextuel.
Private Sub CreateMenu()
Dim tMyMenu As CommandBar
Dim tMenuItem As CommandBarControl
Set tMyMenu = Application.CommandBars.Add("MyMenu", msoBarPopup)
'Set tMenuItem = tMyMenu.Controls.Add(ID:=370) ' Standard Paste values menu item
'tMenuItem.Caption = "Paste &Values"
Set tMenuItem = tMyMenu.Controls.Add(msoControlButton)
With tMenuItem
.Caption = "Special Paste"
.OnAction = "PasteasValue" '"MySpecialPasteMacroName"
End With
End Sub
J'ai trouvé une solution ici: Excel VBA code pour forcer les valeurs que la pâte ne provoque un comportement étrange lorsque les objets de collage
Le code ci-dessous placé dans ce em> permettent de copier la pâte normalement et de réajuster le Formatage au format spécifique de la feuille de calcul cible. p>
L'utilisation d'un global annuler code> provoque des problèmes plus tard dans la piste (je viens de passer par cela avec un outil au travail). L'utilisation de
SendKeys code> n'est pas garantie de fournir le résultat que vous pensez. L'utilisation d'un gestionnaire d'erreur global est également problématique et peut masquer des erreurs authentiques qui doivent être adressées dans le code.
Si vos cellules sont verrouillées et que la feuille de calcul est protégée, personne ne peut coller dans les cellules verrouillées ...
Habituellement, oui, mais parce que j'ai spécifié le macro
pastasvalues () selection.Pastepece Coller: = xlpastevalues end sous code> Cela me permet de coller dans des cellules verrouillées. C'est ce que je veux empêcher - récupérer essentiellement le message de contrôle / erreur standard.