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?
Vídeo recomendado
https://youtu.be/diWPPPhW-9E
https://youtu.be/diWPPPhW-9E
[RESOLVIDO] Desbloquear Copiar/Colar em Macro
-
- Colaborador
- Mensagens: 14
- Registrado em: Qui Jul 07, 2016 9:46 pm
[RESOLVIDO] Desbloquear Copiar/Colar em Macro
Editado pela última vez por Fabricio_Tavares em Sex Dez 09, 2016 8:17 pm, em um total de 1 vez.
- Mikel Silveira Fraga
- Jedi
- Mensagens: 1173
- Registrado em: Sex Mai 27, 2011 3:27 pm
- Localização: Governador Valadares - MG
- Contato:
Re: Desbloquear Copiar/Colar em Macro
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:
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:
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:
Assim que terminar as ações necessárias em sua macro, chame a outra função, que irá desativar os comandos novamente:
Faça os testes e nos retorne. Se tiver alguma dúvida, é só chamar.
Abraços e 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
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
Código: Selecionar todos
Call AtivaFuncoes
Código: Selecionar todos
Call DesativaFuncoes
Abraços e boa noite.
-
- Colaborador
- Mensagens: 14
- Registrado em: Qui Jul 07, 2016 9:46 pm
Re: Desbloquear Copiar/Colar em Macro
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.
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.