Olá, Rogério, boa tarde!
...
Existe uma explicação para isso?
...
Gostaria de entender a lógica desse erro, se é que existe, pois pelo que vejo é muito frequente.
...
A pergunta é: qual planilha estará ativa quando vc inicia a macro? Vc tem como garantir que ActiveSheet bem no início do código será sempre a mesma (por falar nisso, não está claro qual delas é: USUÁRIOS.BD, RECIBOS.BD, CAD.CHEQUES ou outra, suponho que seja CAD.CHEQUES)? Como não temos a pasta de trabalho em mãos, imagino que o problema possa estar aí. Eu fiz uma simulação aqui com seu código, criando planilhas com o mesmo nome e, mesmo tendo funcionado, penso que vale a pena vc fazer algumas modificações para melhorá-lo:
Percebe-se que ao criar a macro, vc inseriu partes que foram codificadas pelo Gravador de Macros. O problema é que o Gravador de Macros nunca qualifica os objetos e isso é sempre uma dor de cabeça na hora de depurar um código. São muitos ActiveIsso, ActiveAquilo, ThisObjeto, ThatObjeto, Select + Selection, etc. . Mas basta vc. manualmente pular para outra planilha ou "estar em" outro objeto quando for rodar a macro que os problemas começam a pipocar. E essa é uma causa muitíssimo comum de erros. Por isso prefira sempre qualificar os objetos antes de aplicar métodos ou modificar propriedades. Pode dar um pouco mais de trabalho braçal, de digitação, mas seu código fica muito mais confiável.
Por exemplo, ao invés de ActiveSheet.Unprotect Password:=111 prefira usar Worksheets("PlanilhaNomeX").Unprotect Password:=111
Além disso, quando um objeto é referenciado várias vezes, vale a pena atribuí-lo a uma variável e usá-la sempre que se referir a ele, assim vc não tem que ficar dando Select nem Activate para poder transformá-lo, o que poderia ser feito, por exemplo, para a planilha CAD.CHEQUES que é a que é mais trabalhada no código. Alternativamente pode-se qualificar uma vez e usá-lo sequencialmente dentro de um bloco With...End With, como sugiro abaixo.
Então uma das formas de reescrever o mesmo código seria:
Sub limp()
Application.ScreenUpdating = False
With Sheets("CAD.CHEQUES")
.Unprotect Password:=111
.Range("C5,C7,C9,C11,C13,C15,C17,C19,C21,C23,C29").ClearContents
.Range("C25").FormulaR1C1 = "=VLOOKUP(R[-2]C,'USUÁRIOS.BD'!R2C2:R26C4,2,0)"
Sheets("RECIBOS.BD").Range("B1").Copy
.Range("C3").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
.Range("l1:p148").ClearContents
.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:=111
End With
Application.ScreenUpdating = True
End Sub
Mas seria melhor mesmo analisarmos o todo de sua pasta como sugeriu o Marcelo para nos certificarmos do que mais poderia estar ocorrendo.
Postado : 14/06/2016 10:01 am