Notifications
Clear all

Ocultar/Exibir colunas usando botão

5 Posts
2 Usuários
0 Reactions
932 Visualizações
(@godegodes)
Posts: 16
Active Member
Topic starter
 

Boa tarde galera.

Estou tentando ocultar/esconder colunas usando um botão e VBA, porém sem sucesso.
Segue o código que tentei utilizar:

Private Sub interface_Click()

Application.ScreenUpdating = False

Dim nLSA As Long, iLSA As Long

iLSA = Application.Match("interfaces", Sheets("L. BMS").Range("AC6:ZZ6"), 0) + 1 O ERRO ACONTECE NESSA LINHA
nLSA = Application.Match("gerenciadoras*", Sheets("L. BMS").Range("AC6:ZZ6"), 0) - 1

If Columns(iLSA & ":" & nLSA).EntireColumn.Hidden = False Then
Columns(iLSA & ":" & nLSA).EntireColumn.Hidden = True
ElseIf Columns(iLSA & ":" & nLSA).EntireColumn.Hidden = True Then
Columns(iLSA & ":" & nLSA).EntireColumn.Hidden = False
End If

Application.ScreenUpdating = True

End Sub

O erro que dá é o seguinte:

Erro em tempo de execução '13':
Tipo Incompatíveis.

Só para ficar mais claro, a ideia é procurar a celula que contem a palavra interfaces (necessariamente estará na linha 6) e a palavra gerenciadoras, selecionar o intervalo entre as duas palavras e ocultar as colunas correspondentes.

Alguem me ajuda??

Abraço

 
Postado : 24/05/2016 1:22 pm
(@osvaldomp)
Posts: 858
Prominent Member
 

Provavelmente o texto "interfaces" (exatamente escrito como está no código) não existe no intervalo pesquisado pelo código, por isso acusa o erro.
Experimente o código abaixo.

Sub OcultaColunas()
 Dim nLSA As Long, iLSA As Long
  Application.ScreenUpdating = False
   Range(Columns(29), Columns(702)).Hidden = False
   On Error GoTo errorH
   iLSA = Application.Match("interfaces", Sheets("L. BMS").Range("AC6:ZZ6"), 0) + 29 
   nLSA = Application.Match("gerenciadoras*", Sheets("L. BMS").Range("AC6:ZZ6"), 0) + 27
   On Error GoTo 0
   Range(Columns(iLSA), Columns(nLSA)).Hidden = True
   Exit Sub
errorH:
  MsgBox "texto não encontrado"
  Application.ScreenUpdating = True
End Sub

Osvaldo

 
Postado : 24/05/2016 3:13 pm
(@godegodes)
Posts: 16
Active Member
Topic starter
 

Osvaldo, muito obrigado pela resposta.
Quando você falou que provavelmente não estava achando a palavra "interfaces" no intervalo eu me toquei que a linha em que eu estava procurando está mesclada, e por isso estava errada. Eu atualizei o código, mas ainda está com erro. Vamos lá, segue o código atualizado:

Private Sub interface_Click()

Application.ScreenUpdating = False

Dim nLSA As Long, iLSA As Long

iLSA = Application.Match("interfaces", Sheets("L. BMS").Range("5:5"), 0) + 1
nLSA = Application.Match("gerenci*", Sheets("L. BMS").Range("5:5"), 0) - 1

If Columns(iLSA & ":" & nLSA).EntireColumn.Hidden = False Then --> AGORA O ERRO ESTÁ AQUI.
Columns(iLSA & ":" & nLSA).EntireColumn.Hidden = True
ElseIf Columns(iLSA & ":" & nLSA).EntireColumn.Hidden = True Then
Columns(iLSA & ":" & nLSA).EntireColumn.Hidden = False
End If

Application.ScreenUpdating = True

End Sub

O erro que aparece é o seguinte:

Erro em tempo de execução '1004'
Erro de definição de aplicativo ou de definição de objeto

O que pode ser?

 
Postado : 25/05/2016 6:55 am
(@osvaldomp)
Posts: 858
Prominent Member
 

If Columns(iLSA & ":" & nLSA).EntireColumn.Hidden = False Then --> AGORA O ERRO ESTÁ AQUI.
O que pode ser?

Você pode corrigir a linha onde ocorre o erro conforme abaixo. Mas o erro vai passar a ocorrer nas três linhas que se sucedem no seu código.

If Range(Columns(iLSA), Columns(nLSA)).Hidden = False Then

No minha opinião, esses seus comandos que verificam se as colunas estão ocultas, além de desnecessários são redundantes. Assim, se as colunas não estão ocultas (é o seu comando acima) obrigatoriamente elas estão aparentes, então é redundante o comando abaixo
ElseIf Columns(iLSA & ":" & nLSA).EntireColumn.Hidden = True Then

No código que eu sugeri os comandos reexibem todas as colunas do intervalo e depois ocultam aquelas localizadas entre os critérios.
Você testou?

Osvaldo

 
Postado : 25/05/2016 7:47 am
(@godegodes)
Posts: 16
Active Member
Topic starter
 

Osvaldo, mais uma vez obrigado.

A correção que você sugeriu deu certo. Agora o código funciona do jeito que preciso.
Em relação ao código que você escreveu, eu cheguei a testar, mas eu tenho diversos botões na minha planilha, e quando vc reexibe td não fica legal.

Leonardo

 
Postado : 25/05/2016 8:25 am