Notifications
Clear all

Problemas com Código em planilha protegida

4 Posts
2 Usuários
0 Reactions
939 Visualizações
(@carloshvb)
Posts: 0
New Member
Topic starter
 

Bom dia Pessoal,

Estou tentando executar o código abaixo em um Workbook que contem 39 Worksheets, porem, mesmo com o código para desproteger o Worksheet, eu recebo o erro 1004 dizendo que o Worksheet está bloqueado.

Sub NovoAno()
Dim ano As Integer
Dim anonovo As Integer

    Dim wkb As Workbook
    Dim wks As Worksheet
    Set wkb = ThisWorkbook
    
ano = Year(Date)
anonovo = ano + 1
    
    For Each wks In wkb.Worksheets
        wks.Unprotect
        
       Cells.Replace What:=ano, Replacement:=anonovo, LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
        
        wks.Protect
        
    Next wks
   
End Sub

Por isso gostaria da ajuda de vocês para tentar resolver este problema.

Em anexo a planilha, os códigos estão no módulo5 e a Sub com problema é a Sub NovoAno().

 
Postado : 26/11/2015 11:15 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Apesar de não ter entendido, teste assim.

Sub NovoAno()
Dim ano As Integer
Dim anonovo As Integer

    Dim wkb As Workbook
    Dim wks As Worksheet
    Set wkb = ThisWorkbook
    
ano = Year(Date)
anonovo = ano + 1
    
    For Each wks In wkb.Worksheets
        wks.Unprotect
    Next wks
    'Essa rotina vc pretende usar um loop ?
        Cells.Replace What:=ano, Replacement:=anonovo, LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    For Each wks In wkb.Worksheets
        wks.Protect
    Next wks
   
End Sub

Att

 
Postado : 26/11/2015 12:56 pm
(@carloshvb)
Posts: 0
New Member
Topic starter
 

Bom dia Alexandre,

Sim, minha intenção com esse código era criar uma rotina que substituísse o ano atual pelo próximo ano em todas as planilhas do workbook, mas como as planilhas são bloqueadas eu criei esta rotina, se houver uma forma mais fácil de fazer isso eu também agradeço, pois utilizei o gravador de macros para fazer a rotina de substituição pois não sei como fazer isso.

O código deu certo no primeiro workbook e está dando erro nos outros.

 
Postado : 27/11/2015 5:06 am
(@carloshvb)
Posts: 0
New Member
Topic starter
 

Consegui resolver

O novo código teve apenas uma alteração, inseri "wks." antes do Cells

Sub NovoAno()
Dim ano As Integer
Dim anonovo As Integer

    Dim wkb As Workbook
    Dim wks As Worksheet
    Set wkb = ThisWorkbook
    
ano = Year(Date)
anonovo = ano + 1
    
    For Each wks In wkb.Worksheets
        wks.Unprotect
        
       wks.Cells.Replace What:=ano, Replacement:=anonovo, LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
        
        wks.Protect
        
    Next wks
   
End Sub
 
Postado : 27/11/2015 8:23 am