VBA

Proibindo o copiar e colar com VBA no Excel

Não permita que seus projetos sejam copiados sem a sua permição. Veja aqui como impedir esse problema com um código de VBA.

Por Maximiliano Meyer em 07/08/2015 às 14:38 - atualizado: 21/05/2018 13:05

Mais um post voltado à segurança de seus projetos. Ideal para quando você quiser compartilhar uma planilha com alguém, mas tem receio que seus dados sejam copiados. Com o código que aprenderemos o usuário não poderá copiar ou recortar de uma planilha para outra.

Funciona assim: Abra a janela de edição de códigos (atalho alt f11) e dê um clique em “EstaPasta_de_trabalho”. Lá vamos colar o seguinte código:

Private Sub Workbook_Activate()
Dim oCtrl As Office.CommandBarControl

Application.OnKey "^{c}", "" 'Desativa o Copiar pelo teclado
Application.OnKey "^{v}", "" 'Desativa o Colar pelo teclado
Application.OnKey "^{x}", "" 'Desativa o Recortar pelo teclado
  
     'Desabilita todos os comandos de Recortar
          For Each oCtrl In Application.CommandBars.FindControls(ID:=21)
                oCtrl.Enabled = False
          Next oCtrl
  
     'Desabilita todos os comandos de Copiar
           For Each oCtrl In Application.CommandBars.FindControls(ID:=19)
                oCtrl.Enabled = False
          Next oCtrl

     'Desabilita o colar especial
           For Each oCtrl In Application.CommandBars.FindControls(ID:=21437)
                oCtrl.Enabled = False
          Next oCtrl

     Application.CellDragAndDrop = False   

End Sub      
  
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
  
     With Application
          .CellDragAndDrop = False
          .CutCopyMode = False 'limpa a área de transferência
     End With
  
End Sub

Confira como sua tela deverá estar se parecendo neste momento:

Proibindo o copiar e colar com VBA no Excel

Pronto, veja que agora a opção de Recortar, Copiar e Colar não estarão disponíveis quando você usar o botão direito do seu mouse em alguma célula

Proibindo o copiar e colar com VBA no Excel

Com o nosso código também foram bloqueadas as ações através dos atalhos do teclado. Essa parte não estava inclusa na versão original do post e foi adicionada após o comentário  bloqueia os atalhos no teclado foi uma contribuição do nosso leitor Rodrigo Castro. Valeu por compartilhar conhecimento conosco, Rodrigo!

Detalhes importantes: Não esqueça de salvar o "documento como modelo habilitado para macro" e de implementar este código que aprendemos em outra aula para fazer com que a execução de macros seja obrigatória, afinal, de nada adiantaria se o usuário usasse a planilha com as macros desativadas, certo?

Não esqueça que você pode fazer algumas pequenas modificações, por exemplo: Não incuir a linha referente ao bloqueio do atalho de "Colar", assim, caso necessário você pode inserir dados na planilha por esta forma mais rápida do que digitar linhas e linhas de conteúdo. 

Desfazendo o processo

Muita gente relatou nos comentários que não está conseguindo desfazer o erro, então aqui vai a solução: Troque o código anterior pelo código abaixo e execute-o:

Private Sub Workbook_Activate()
Dim oCtrl As Office.CommandBarControl

Application.OnKey "^{c}", "" 'Desativa o Copiar pelo teclado
Application.OnKey "^{v}", "" 'Desativa o Colar pelo teclado
Application.OnKey "^{x}", "" 'Desativa o Recortar pelo teclado
  
     'Desabilita todos os comandos de Recortar
          For Each oCtrl In Application.CommandBars.FindControls(ID:=21)
                oCtrl.Enabled = True
          Next oCtrl
  
     'Desabilita todos os comandos de Copiar
           For Each oCtrl In Application.CommandBars.FindControls(ID:=19)
                oCtrl.Enabled = True
          Next oCtrl

     'Desabilita o colar especial
           For Each oCtrl In Application.CommandBars.FindControls(ID:=21437)
                oCtrl.Enabled = True
          Next oCtrl

     Application.CellDragAndDrop = True

End Sub
  
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
  
     With Application
          .CellDragAndDrop = True
          .CutCopyMode = True 'limpa a área de transferência
     End With
  
End Sub

Agora sim. 

Proibindo o copiar e colar com VBA no Excel

relacionados

Participe
do nosso grupo

recentes

compartilhe este post

O que ler em seguida

comentários

  • ASSINE NOSSA NEWSLETTER

    As melhores publicações no
    seu e-mail