Notifications
Clear all

MACRO - Reexibir Colunas Digitadas pelo o Usuário

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

Bom DIa,

Tenho uma planilha que está oculta algumas colunas, gostaria de uma macro que ao ser executada pedisse ao usuário a quantidade de colunas para serem reexibidas, ao informar o quantitativo, a macro reexibia o numero de colunas informadas.

EXEMPLO:

Em uma planilha costa as colunas de A á C exibidas;
e as colunas de D á J estão ocultas;
O usuário iria informar o Número de colunas a serem exibidas: Digitaria 2
Entao seria exibida as colunas D e E e a planilha ficaria com as colunas de A á E aparecendo.

Alguem poderia me ajudar.:D

 
Postado : 11/02/2012 10:20 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 


Veja se atende:

Sub Reexibir()

x = CInt(InputBox("Quantidade de colunas a ser reexibidas"))

i = 1

Do While Columns(i).Hidden = False
i = i + 1
Loop

j = i + x - 1

Do While i <= j
Columns(i).EntireColumn.Hidden = False
i = i + 1
Loop

End Sub

 
Postado : 11/02/2012 6:14 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Agora apenas um complemento:
Modifiquei o primeiro codigo para reexibir linhas, só que consta um erro quando não há mais linhas ocultas,
como faço para complementar de exibir uma mensagem de que não há mais linhas a serem exibidas?

Obs: AS modificações foram feitas no primeiro codigo...tentei colocar um IF, mas nao deu certo!Se não for pedir muito gostaria de saber como complemento isto!

Muito Obrigada mesmo!

 
Postado : 11/02/2012 8:52 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 


Anne,

utilizei parte da ideia postada no código do Alexandre no meu código.

Como ele disse, como você já fez modificações, seria melhor que postasse seu código atual.

De qualquer maneira...

Otimizei incluindo uma análise que não faz todas as colunas serem 'varridas', ou seja, vai considerar apenas as colunas que estiverem ocultas na sequência, pois entendo que esta é a sua intenção.

Considerei o fato de não haver colunas ocultas, o que será reportado ao usuário, bem como o fato do usuário poder solicitar que sejam reexibidas mais colunas do que a quantidade oculta (que será informada na InputBox), o que também será reportado ao usuário.

Faça muitos testes e indique o que não estiver sendo retornado como esperado.


Sub Reexibir()

Dim cont As Long
Dim col As Variant

cont = 0

For Each col In ActiveSheet.Columns
If col.Hidden = True Then
cont = cont + 1
End If
If cont >= 1 And col.Hidden = False Then
Exit For
End If
Next col

If cont = 0 Then
MsgBox "Não há colunas ocultas."
Exit Sub
End If

Init:
x = CInt(InputBox("Você pode reexibir " & cont & " colunas. Quantidade:"))

If x > cont Then
MsgBox "Há apenas " & cont & " colunas ocultas."
GoTo Init
End If

i = 1

Do While Columns(i).Hidden = False
i = i + 1
Loop

j = i + x - 1

Do While i <= j
Columns(i).EntireColumn.Hidden = False
i = i + 1
Loop

End Sub

 
Postado : 12/02/2012 7:05 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Colegas, aproveitando a rotina do Edson, fiz uma adaptação da forma que entendi a solicitação, resumindo a mesma somente para as Colunas que a Anne mencionou :

Em uma planilha costa as colunas de A á C exibidas;
e as colunas de D á J estão ocultas;
O usuário iria informar o Número de colunas a serem exibidas: Digitaria 2
Entao seria exibida as colunas D e E e a planilha ficaria com as colunas de A á E aparecendo.

Para as Colunas, fiz a adaptação para a mesma percorrer somente das Colunas "D a J" e adicionei a verificação se for pressionado o Botão "Cancel", evitando erro :

COLUNAS :

Sub ReexibirColunasMauro()
    'Adaptação cod Edson
    Dim cont As Long
    Dim col As Variant
    Dim coluna As Variant
    Dim x As Integer
    
    'Definimos as Colunas, evitando percorrer todas do aplicativo
    Set col = Columns("D:J")
    
    cont = 0
    
    For Each coluna In col
        If coluna.Hidden = True Then
            cont = cont + 1
        End If
    
        If cont >= 1 And coluna.Hidden = False Then
            Exit For
        End If
    
    Next coluna
    
    If cont = 0 Then
        MsgBox "Não há colunas ocultas."
        Exit Sub
    End If

Init:
    
    x = CInt("0" & InputBox("Você pode reexibir " & cont & " colunas. Quantidade:"))
    
    If x = 0 Then 'Sai da rotina se Pressionar Cancel ou OK sem Digitar a qde
        Exit Sub
    Else
        'Continua se Botão OK Pressionado e a variavel for > 0
    End If
    
    If x > cont Then
        MsgBox "Há apenas " & cont & " colunas ocultas."
        GoTo Init
    End If

    i = 1

    Do While Columns(i).Hidden = False
        i = i + 1
    Loop

    j = i + x - 1

    Do While i <= j
        Columns(i).EntireColumn.Hidden = False
        i = i + 1
    Loop

End Sub

Para as Linhas a Rotina seria a mesma, alterando "Columns" por "Rows", e como não temos a qde de linhas definido como foi a das Colunas, define um Range expecifico, mas podemos adaptar com Rows, Count :

LINHAS :

Sub ReexibirLinhasMauro()
    'Adaptação cod Edson
    Dim contLin As Long
    Dim linha As Variant
    Dim x As Integer
    contLin = 0

'Definimos a qde de linhas para não termos de percorrer até a última
'Poderiamos utilizar Rows.Count
    For Each linha In Worksheets("Plan1").Range("A2:A10")
        If linha.EntireRow.Hidden = True Then
          contLin = contLin + 1
        End If
        
        If contLin >= 1 And linha.EntireRow.Hidden = False Then
            Exit For
        End If
    Next linha

    If contLin = 0 Then
        MsgBox "Não há Linhas ocultas."
        Exit Sub
    End If

Init:
    
    x = CInt("0" & InputBox("Você pode reexibir " & contLin & " Linhas. Quantidade:"))
    
    If x = 0 Then 'Sai da rotina se Pressionar Cancel ou OK sem Digitar a qde
        Exit Sub
    Else
        'Continua se Botão OK Pressionado e a variavel for > 0
    End If
    
    If x > contLin Then
        MsgBox "Há apenas " & contLin & " Linhas ocultas."
        GoTo Init
    End If

    i = 1

    Do While Rows(i).Hidden = False
        i = i + 1
    Loop

    j = i + x - 1

    Do While i <= j
        Rows(i).EntireRow.Hidden = False
        i = i + 1
    Loop

End Sub

Edson, grato pelo código e espero que a adaptação seja do agrado e surta o resultado esperado pela nossa colega.

[]s

 
Postado : 12/02/2012 8:20 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Parabens ...consegui alcançar meu objetivo com as respostas que me foram dadas....

Caros colegas, agradeço todo o trabalho realizado para alcançar o objetivo da minha resposta....

Aproveitei de tudo um pouco e pude até fazer e executar novas funcionalidades apartir do que me foi respondido, por isso que digo que aproveitei de tudo um pouco e supri as minhas duvidas!!!!

Agradeço muito!

Atenciosamente,

Anne Caroline

 
Postado : 13/02/2012 9:20 pm