Página 1 de 1

Limpar filtros sem desproteger a planilha

Enviado: 22 Jun 2017 às 12:49
por mberri
Criei um arquivo de suplemento XLA com o seguinte código:
Código: Selecionar todos
Public Sub LimpaTodosFiltros()
    If ActiveSheet.FilterMode Then
        On Error Resume Next
        ActiveSheet.ShowAllData
        On Error GoTo 0
    End If
End Sub
Funciona perfeitamente se a planilha não estiver protegida

Porém se possuir proteção o comando ShowAllData não funciona, meu problema é que pretendo usar em várias planilhas, onde não sei: qual a senha de proteção, quais opções estão habilitadas na proteção, quais linhas/colunas está ativo o filtro.

Se puderem ajudar fico grato...

Re: Limpar filtros sem desproteger a planilha

Enviado: 22 Jun 2017 às 13:09
por alexandrevba
Boa tarde!!

Desproteja a guia via VBA.
Código: Selecionar todos
Sub Tente()

ActiveSheet.Protect Password:="SuaSenha", userinterfaceonly:=True
'Codigo limpar filtro aqui
ActiveSheet.Protect Password:="SuaSenha"

End Sub
Att

Limpar filtros sem desproteger a planilha

Enviado: 22 Jun 2017 às 14:11
por mberri
O problema é que estarei utilizando em várias planilhas, onde muitas delas não sei a senha e nem quais as opções estão habilitadas na proteção.

Limpar filtros sem desproteger a planilha

Enviado: 22 Jun 2017 às 14:52
por Feka
Você terá que desproteger a planilha.

Esse código que eu peguei da WEB desbloqueia a planilha sem você precisar saber da senha, funciona perfeitamente:
Código: Selecionar todos
Sub DesprotegerPlanilhaAtiva()
 
Dim i, i1, i2, i3, i4, i5, i6 As Integer, j As Integer, k As Integer, l As Integer, m As Integer, n As Integer
On Error Resume Next
For i = 65 To 66
For j = 65 To 66
For k = 65 To 66
For l = 65 To 66
For m = 65 To 66
For i1 = 65 To 66
For i2 = 65 To 66
For i3 = 65 To 66
For i4 = 65 To 66
For i5 = 65 To 66
For i6 = 65 To 66
For n = 32 To 126
ActiveSheet.Unprotect Chr(i) & Chr(j) & Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
If ActiveSheet.ProtectContents = False Then
MsgBox "One usable password is " & Chr(i) & Chr(j) & _
Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & _
Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
Exit Sub
End If
Next
Next
Next
Next
Next
Next
Next
Next
Next
Next
Next
Next
End Sub

Re: Limpar filtros sem desproteger a planilha

Enviado: 22 Jun 2017 às 15:25
por alexandrevba
Boa tarde!!

As senha são as mesmas?
Veja:
http://www.vbaexpress.com/kb/getarticle.php?kb_id=142
Código: Selecionar todos
Sub AleVBA()

    Dim ws As Worksheet
    Dim shtArray() As String
    Dim intA As Integer
    Dim intB As Integer

    For Each ws In ActiveWindow.SelectedSheets
        intA = intA + 1
        ReDim Preserve shtArray(intA)
        shtArray(intA) = ws.Name
    Next ws

    For Each ws In ActiveWorkbook.Worksheets
        ws.Select
    Next ws

    For intB = 1 To intA
        ActiveWorkbook.Worksheets(shtArray(intB)).Unprotect "SuaSenha"
    Next intB
    'Escreva o Código limpar filtro aqui
    
    'Cole o Código para proteger as guias aqui
End Sub
Att

Limpar filtros sem desproteger a planilha

Enviado: 22 Jun 2017 às 16:19
por mberri
Não posso acreditar que não exista uma forma de limpar os filtros sem retirar a proteção.
Em anexo segue o exemplo que estou fazendo.

Durante meu dia, utilizo várias planilhas de autores diferentes, não posso ficar desbloqueando o arquivo.

Veja na figura abaixo que mesmo estando protegido, a opção de filtros está habilitada.
Imagem

Qual a lógica para o comando ShowAllData não funcionar?
Um outro exemplo, se eu soubesse exatamente os campo que contenham filtros, eu conseguiria tirar o filtro um por um, mas para facilitar queria tirar todos os filtros.

Re: Limpar filtros sem desproteger a planilha

Enviado: 22 Jun 2017 às 16:42
por alexandrevba
Boa tarde!

Eu não sei mais o que você quer.
Código: Selecionar todos
Sub Tente_Isso()
    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
        ws.AutoFilterMode = False
    Next ws
End Sub
Att