Tag Archives: Impedir

Impedir Copiar / Colar no Excel com VBA

Não é raro ver essa necessidade em fóruns de Excel que frequento. Por isso, coloco abaixo uma possível solução.

O código abaixo impede via VBA que o usuário utilize a funcionalidades Copiar e Colar no Microsoft Excel. De quebra, ainda desabilita os botões copiar, e recortar das barras de ferramenta padrão do Excel.

Especificamente, o código trata os principal evento de navegação entre células, desativando o contexto CutCopyMode, o que faz com que a marcação do copiar e consequentemente a opção de colar do usuário. Para não atrapalhar o funcionamento de outras planilhas, o código trata também os eventos Workbook_Activate e Workbook_Deactivate, reativando o contexto e os botões das operações em questão.

Todo o código deve ser colocado no módulo EstaPasta_de_Trabalho no VBA (ThisWorkbook em inglês).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Private Sub Workbook_Activate()
Dim oCtrl As Office.CommandBarControl
 
'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
 
        Application.CellDragAndDrop = False
 
End Sub
 
Private Sub Workbook_Deactivate()
Dim oCtrl As Office.CommandBarControl
 
'Habilita 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
 
        Application.CellDragAndDrop = True
 
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

Nem preciso dizer que é preciso ativar as macros para a que o código funcione. Também não preciso lembrar que não ha como ativar as macros automaticamente, a não ser que utilize o recursos de certificados digitais do Office.

Abraços

Tomás Vásquez
http://www.tomasvasquez.com.br