Desative Ctrl + V no Microsoft Excel (permitir colar com clique com o botão direito)

Desative Ctrl + V no Microsoft Excel (permitir colar com clique com o botão direito)

Tenho uma planilha Excel usada por mim e minha equipe. Esta planilha usa formatação condicional, então gostaria que minha equipe NÃO usasse Ctrl + V e, em vez disso, clicasse com o botão direito e usasse 'colar como valores'. Quando eles usam Ctrl + V, a formatação condicional se fragmenta com o tempo. Eu contei a eles sobre isso e adicionei um lembrete de mensagem pop-up usando validação de dados, mas eles ainda usam Ctrl + V!

Quero desativar a colagem com Ctrl + V e adicionar uma caixa de mensagens a Ctrl + V.

Aqui está meu VBA (liguei pasteWarn() a Ctrl + V). Parece não ter nenhum efeito - o msgbox não aparece e ctrl + V funciona normalmente.

Sub pasteGone()
'Disable CTRL + V.
Application.OnKey "^{v}", "" 'Paste
End Sub

Sub pasteWarn()
' Bind this to Ctrl + V
MsgBox "Ctrl + V has been disabled. Please right-click and use 'Paste as Values'."
End Sub

Possível complicação: minha equipe e eu usamos uma combinação do Office 2016, 2013 e 2010. (Estou em 2016; todos estão em 2010 e 2013.)

Responder1

Esta não é uma resposta à pergunta tal como está, mas talvez uma maneira de resolver o problema de qualquer maneira.

Em vez de forçar os usuários a se adaptarem à pasta de trabalho, faça com que a pasta de trabalho adapte a entrada para se adequar à pasta de trabalho.
Ou seja, quando o usuário colar algo, desfaça o que fez e cole como valores.
Dessa forma eles podem colar com CTRL+V e ainda estará correto.
Você deve definir um ponto de interrupção no código na linha lastAction e ver o que é "Colar" no seu idioma e usá-lo no If.

Private Sub Worksheet_Change(ByVal Target As Range)

  lastAction = Application.CommandBars("Standard").FindControl(ID:=128).List(1)

  If lastAction = "Paste" Then ' change to your language
        With Application
            .EnableEvents = False
            .Undo
        End With
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        Application.EnableEvents = True
  End If
End Sub

Adicione o código acima à(s) planilha(s) em que deseja isso. Você também pode usar Target se desejar limitar PasteValues ​​a apenas uma parte da planilha.

Responder2

Eu tive um problema semelhante anteriormente, a única solução que consegui encontrar foi impedir que o usuário pudesse copiar. (eu sei que isso pode não ser exatamente o que você procura, pois eles ainda podem precisar usar copy)

Eu usei o abaixo:

Private Sub Workbook_Activate()
    Application.CutCopyMode = False
    Application.OnKey "^c", ""
    Application.CellDragAndDrop = False
End Sub
Private Sub Workbook_Deactivate()
    Application.CellDragAndDrop = True
    Application.OnKey "^c"
    Application.CutCopyMode = False
End Sub
 Private Sub Workbook_WindowActivate(ByVal Wn As Window)
    Application.CutCopyMode = False
    Application.OnKey "^c", ""
    Application.CellDragAndDrop = False
End Sub
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
    Application.CellDragAndDrop = True
    Application.OnKey "^c"
    Application.CutCopyMode = False
End Sub
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    Application.CutCopyMode = False
End Sub
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Application.OnKey "^c", ""
    Application.CellDragAndDrop = False
    Application.CutCopyMode = False
End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
    Application.CutCopyMode = False
End Sub
Private Sub Workbook_Open()
    MsgBox "Copying and Pasting into the skills matrix has been disabled to prevent changes in the workbook functionality."
End Sub

informação relacionada