Notifications
Clear all

Usando Array para ocultar Worksheets

2 Posts
1 Usuários
0 Reactions
2,357 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Usei um código simples para ocultar algumas planilhas do meu workbook e fiz isso definindo um Array, cujo os elementos são as planilhas que desejo ocultar:

Dim A As Variant
A = Array("Plan1", "Plan2")
Worksheets(A).Visible = False

Coloquei essas linhas de código no evento Initialize do meu UserForm1. Na primeira vez funcionou sem problemas e as planilhas ficaram ocultas.

Para não gerar um conflito toda vez que o meu aplicativo for iniciado, coloquei a seguinte linha no evento Terminate do meu UserForm1:

Dim A As Variant
A = Array("Plan1", "Plan2")
Worksheets(A).Visible = true

Para a minha surpresa acusou o seguinte erro:

"Não é possível definir a propriedade Visible da Classe Sheets."

Eu quero iniciar meu UserForm1 com algumas planilhas ocultas, mas como fazer isso sem gerar esse conflito toda vez que ele iniciar?

Detalhe: Para testar os códigos criei um botão e no evento Click coloquei o seguinte código:

Worksheets("Plan1").Visible = true
Worksheets("Plan2").Visible = true

Quando dou um click no botão as planilhas voltam a ficar visíveis, mas o mesmo código no evento Terminate do UserForm1 não funciona e acusa aquela mensagem.

Outro detalhe: Quando uso o Array para ocultar as planilhas a coisa funciona bem, mas para torná-las visíveis de novo o Array não funciona. Por quê?

Worksheets(Array("Plan1", "Plan2")).Visible = false       'funciona
Worksheets(Array("Plan1", "Plan2")).Visible = True       'não funciona

Por que isso acontece?

Alguém pode me ajudar?

Luiz Roberto

 
Postado : 28/05/2011 6:55 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Beto, em seu Array - "A" é Igual a 2 itens "Plan1 e Plan2", na primeira vez da certo pois é usada os 2 valores, na segunda precisamos capturar cada valor dentro do Array.

Por Exemplo :
Em um Array a coleção é iniciada em 0 e você definiu dois Valores "Plan1 e Plan2", então :
"Plan1" é = 0 e "Plan2" = 1, então devemos tratar da seguinte forma:

A = Array("Plan1", "Plan2")
Worksheets(A(0)).Visible = True '0 Plan1
Worksheets(A(1)).Visible = True '1 Plan2

Se tivessemos 10 Plan, a rotina acima ficaria grande, então, para evitarmos isto, tratamos o Array com a instrução For Each capturando e tratando cada valor do Array, conforme seu exemplo, a rotina ficaria assim :

Private Sub UserForm_Initialize()
    Dim x As Variant
    Dim A As Variant
    
    A = Array("Plan1", "Plan2")
    
        For Each x In A 'Para Cada Valor dentro do Array
          Worksheets(x).Visible = False 'Oculto ou True para Exibir
        Next

End Sub

Se olhar na prorpia ajuda do Excel no VBA, terá outras opções para Visible, esta propriedade permite que o usuário ao ter acesso ao arquivo, vá no Menu / Formatar / Planilha - Exibir, se utilizar "xlSheetVeryHidden", a mesma não estará disponivel no Menu.
Agora se a intensão é manter todas Ocultas, não precisa reexibi-las ao Sair, pode deixar Ocultas mesmo, eu costumo utilizar a seguinte rotina no Evento OPEN do WorkBook :

Private Sub Workbook_Open()

Set wsInicio = Worksheets("Plan1")

On Error Resume Next
    
    Dim sht As Worksheet
    
        wsInicio.Visible = xlSheetVisible 'Força a ABA Plan1 como Visivel
        wsInicio.Activate 'Mantem a Plan principal sempre como primeira
    
    'Para Cada ABA Nome diferente de "Plan1" oculta as mesmas
    For Each sht In ThisWorkbook.Worksheets
        If sht.Name <> wsInicio.Name Then
            sht.Visible = xlSheetVeryHidden
        End If
    Next

End Sub

abraços

 
Postado : 28/05/2011 12:14 pm