Vídeo recomendado
https://youtu.be/diWPPPhW-9E

[RESOLVIDO] Desbloquear Copiar/Colar em Macro

Fórum para dúvidas sobre os fundamentos da linguagem de programação Visual Basic no contexto do VBA
Fabricio_Tavares
Colaborador
Colaborador
Mensagens: 14
Registrado em: Qui Jul 07, 2016 9:46 pm

[RESOLVIDO] Desbloquear Copiar/Colar em Macro

Mensagem por Fabricio_Tavares »

Eu adicionei o seguinte código em minha pasta de trabalho:

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

'Habilita 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

Este código resolve muito bem o que preciso na planilha, pois gostaria que os usuários não tivessem a opção de copiar/colar disponíveis.

No entanto, tenho macros que utilizam o copiar/colar e com este código adicionado, estas macros dão erro, pois ele limpa a área de transferência.

Já tentei fazer alterações neste código, ou inserir ele dentro das macros de forma que fosse habilitado somente para aquela macro, mas não está funcionando.

Como posso fazer para habilitar o copiar/colar somente nas macros?
Editado pela última vez por Fabricio_Tavares em Sex Dez 09, 2016 8:17 pm, em um total de 1 vez.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
Mikel Silveira Fraga
Jedi
Jedi
Mensagens: 1173
Registrado em: Sex Mai 27, 2011 3:27 pm
Localização: Governador Valadares - MG
Contato:

Re: Desbloquear Copiar/Colar em Macro

Mensagem por Mikel Silveira Fraga »

Fabrício, boa noite.

O bom que seu código já funciona normalmente, então vamos trabalhar apenas a lógica da situação. Vamos lá.

Baseado no seu próprio código, na parte do Workbook, mantenha os eventos Workbook_Activate, Workbook_Desactivate e Workbook_SheetSelectionChange, mas os comandos serão iguais aos abaixo:

Código: Selecionar todos

Private Sub Workbook_Activate()
  Call DesativaFuncoes
End Sub

Private Sub Workbook_Deactivate()
  Call AtivaFuncoes
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
Feito isso, vamos pegar os comandos que ativam e desativam os comando Copiar e Colar, e vamos criar novas funções em um Módulo, conforme abaixo:

Código: Selecionar todos

Sub DesativaFuncoes()
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

Sub AtivaFuncoes()
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

'Habilita todos os comandos de Copiar
For Each oCtrl In Application.CommandBars.FindControls(ID:=19)
oCtrl.Enabled = True
Next oCtrl

Application.CellDragAndDrop = True

End Sub
Agora, nos outros comandos, sempre que você precisar fazer alguma das funções de copiar e colar, vai inserir antes da rotina o linha abaixo:

Código: Selecionar todos

Call AtivaFuncoes
Assim que terminar as ações necessárias em sua macro, chame a outra função, que irá desativar os comandos novamente:

Código: Selecionar todos

Call DesativaFuncoes
Faça os testes e nos retorne. Se tiver alguma dúvida, é só chamar.

Abraços e boa noite.


Fabricio_Tavares
Colaborador
Colaborador
Mensagens: 14
Registrado em: Qui Jul 07, 2016 9:46 pm

Re: Desbloquear Copiar/Colar em Macro

Mensagem por Fabricio_Tavares »

Boa noite Mikel,

Eu apliquei a sugestão que você deu, mas continuou dando o mesmo erro.
E acabou que procurando por outra função, encontrei a solução para meu problema.

Posso deixar o código normalmente no workbook e basta inserir no início e no fim de cada macro o seguinte código: Application.EnableEvents = False ou True. Como no exemplo abaixo:

Sub Macro1()
Application.EnableEvents = False
Range("A5").Select
Selection.Copy
Range("C5").Select
ActiveSheet.Paste
Application.EnableEvents = True
End Sub

Dessa forma, toda macro roda sem o comando do workbook bloquear qualquer ação contrária. E ainda evita que os usuários fiquem visualizando todos os comandos executados durante a macro, o que demora mais e fica "feio". rsrs

Mas muito obrigado pela ajuda e espero que este tópico sirva para ajudar outros usuários com o mesmo problema.

Abraços.


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder