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