0
votes

Empêcher les valeurs de coller dans des cellules verrouillées

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 v ) 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 e + s S + v ) 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 pour coller uniquement est parce que mes utilisateurs ne savent pas à copier la pâte spéciale mais ne connaissent que la norme Ctrl v , qui dans le cas sans macro détruit le format.

Toute aide sur la façon dont je peux limiter mon Ctrl V macro à ne pas coller des valeurs à des cellules déverrouillées?

edit

La macro que je lance avec Ctrl v : xxx


2 commentaires

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 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.


3 Réponses :


0
votes

Sans voir votre code, tout ce que nous pouvons vous donner est un extrait. Fondamentalement, vous pouvez tester si elle est verrouillée avec

ActiveCell.Locked

Ceci retournera un vrai si c'est le cas. Substituez votre identification de la cellule pour ActiveCell .


4 commentaires

.Olocked peut être dans trois états: true si toutes les cellules de la plage sont verrouillées, false si toutes les cellules de la plage sont déverrouillées et null 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!



0
votes

Une autre approche n'est pas de sur-traduire ctrl-v code> mais pour utiliser un menu contextuel.

Dans la feuille de calcul que vous souhaitez contrôler, placez le gestionnaire d'événements suivant: P >

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


0 commentaires

0
votes

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 permettent de copier la pâte normalement et de réajuster le Formatage au format spécifique de la feuille de calcul cible. xxx


1 commentaires

L'utilisation d'un global annuler provoque des problèmes plus tard dans la piste (je viens de passer par cela avec un outil au travail). L'utilisation de SendKeys 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.