Notifications
Clear all

Erro de MACRO

4 Posts
2 Usuários
1 Reactions
1,619 Visualizações
(@marcosuke)
Posts: 72
Trusted Member
Topic starter
 

Ola amigos!

Estou tentando usar a macro abaixo, mas ele apresenta erro e não consigo resolver. Basicamente ele vai em uma aba, copia os dados de uma coluna, cola essas informaçoes em outra aba, remove os dados repetidos, e copia esses dados para outra coluna da mesma aba. O erro acontece quando eu protejo a aba com senha, mas mesmo que eu coloque o argumento pra desabilitar a senha e habilitar depois do processo, ele não funciona. poderiam me ajudar? OBS: O erro ocorre onde está grifado.

' COPIAR_CONTAS_APLICADORES Macro
'

'

Sheets("REM31").Select
ActiveSheet.Unprotect "*******"
Range("A11").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
ActiveSheet.Protect "
****"
Sheets("COMPILADOR").Select
ActiveSheet.Unprotect "
****"
Range("AJ6").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
ActiveSheet.Range("$AJ$6:$AJ$19995").RemoveDuplicates Columns:=1, Header:= _
xlNo
Range("AJ6:AJ10000").Select
Selection.Copy
Range("C6").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("C6").Select
ActiveSheet.Protect "
*******"
End Sub

 

 

Este tópico foi modificado 4 anos atrás 2 vezes by marcosuke
 
Postado : 19/05/2021 5:08 pm
(@mprudencio)
Posts: 2749
Famed Member
 

Teste o codigo abaixo

 

Sub Copiar()

Dim lin As Long

Call Desproteger

lin = Sheets("REM31").Range("A" & Rows.Count).End(xlUp).Row


Sheets("REM31").Range("A11:A" & lin).Copy


With Sheets("COMPILADOR")

.Select
.Range("AJ6").PasteSpecial Paste:=xlPasteValues
lin = .Range("AJ" & Rows.Count).End(xlUp).Row
.Range("$AJ$6:$AJ$" & lin).RemoveDuplicates Columns:=1, Header:=xlNo
.Range("AJ6:AJ" & lin).Copy
.Range("C6").PasteSpecial Paste:=xlPasteValues
.Range("C6").Select

End With

Call Proteger

End Sub


Sub Desproteger()


Dim Plan As Worksheet

For Each Plan In Worksheets

Plan.Unprotect "sua senha"

Next Plan

End Sub


Sub Proteger()
Dim Plan As Worksheet

For Each Plan In Worksheets

Plan.Protect "sua senha"

Next Plan

End Sub

Marcelo Prudencio
Microsoft Excel Brasil no Facebook

"Começar já é a metade do caminho."
Autor Desconhecido

Simplifica que simples fica.
Nicole Tomazella.

"O Simples é Sempre Melhor Que o Complicado"
Jorge Paulo Lemann.

 
Postado : 19/05/2021 6:44 pm
marcosuke reacted
(@marcosuke)
Posts: 72
Trusted Member
Topic starter
 

@mprudencio Ola Marcelo!

Funcionou perfeitamente! Eu não sei muita coisa de VBA, então não consigo identificar muito dos erros que as vezes aparecem.

Você saberia me dizer pq a macro apresentava erro quando eu protegia a planilha, visto que coloquei o argumento para desproteger e proteger novamente. E vi que você usou "Plan.Unprotect / Plan.Protect" aou inves de "ActiveSheets.Unprotect / ActiveSheets.Protect".

Qual a diferença entre elas?

Agradeço imensamente sua ajuda! Muio obrigado!

 
Postado : 20/05/2021 8:17 am
(@mprudencio)
Posts: 2749
Famed Member
 

Na verdade o que eu fiz foi separar o codigo de proteção e desproteção das planilhas.

 

 

O codigo sub proteger e sub desproteger protegem e desprotegem todas as planilhas da pasta de trabalho

E sempre que vc for executar faça de forma que vc proteja e desproteja apenas uma vez, e nao varias vezes como vc fez.

E com relação com a diferença entre a variavel Plan que eu criei no codigo que protege e desprotege é para evitar erros na hora da execução.

 

Activesheet vai rodar na planilha ativa, nao importa qual a planilha esteja aberta.

Por exemplo se o seu codigo de copiar estivesse com activesheet, e vc tiver com outro arquivo aberto ele vai executar no novo arquivo e nao onde deveria.

Então é de grande importancia que vc declare as variaveis corretamente para que seus codigos sejam executados exatamente onde vc deseja.

 

 

Marcelo Prudencio
Microsoft Excel Brasil no Facebook

"Começar já é a metade do caminho."
Autor Desconhecido

Simplifica que simples fica.
Nicole Tomazella.

"O Simples é Sempre Melhor Que o Complicado"
Jorge Paulo Lemann.

 
Postado : 24/05/2021 12:11 pm