2017-06-29 66 views
6

Mam ten arkusz, w którym używam filtra zaawansowanego do wyszukiwania informacji w innym arkuszu w moim skoroszycie.excel: zaawansowany filtr z chronionym arkuszem

Dodatkowo, chcę chronić arkusz, ponieważ mam pewne formuły na komórkach, których ludzie nie powinni zmieniać, ale mam również komórki, do których użytkownik powinien dostarczyć pewne informacje, a ja już odblokowałem te komórki jako można zobaczyć poniżej:

enter image description here

problem jest, gdy próbuję uruchomić mój Filtr zaawansowany gdy klikam mój przycisk „Filtr”. Pojawia się komunikat o błędzie z informacją:

Filtr zaawansowany nie działa w arkuszu chronionym.

Więc wiąże ten kod do mojego przycisk „Filter”:

Private Sub Filtrar_Click() 

Dim wks As Worksheet 

For Each wks In ActiveWorkbook.Worksheets 
    wks.Unprotect "Password" 
    Call LimparAntes 
    wks.Protect "Password", UserInterfaceOnly:=True 
Next 

End Sub 

LimparAntes sub jest rutyna, która wywołuje Filtr zaawansowany, ale nadal pojawia się ten sam błąd, więc jestem w wątpić. Kod znajduje się poniżej:

Sub LimparAntes() 
' 
' LimparAntes Macro 
' 

' 
Dim Lastrow As Long 
Lastrow = Sheets("AUX").Range("A" & rows.Count).End(xlUp).Row 

    Sheets("AUX").Range("A1:K" & Lastrow).AdvancedFilter Action:=xlFilterCopy, _ 
     CriteriaRange:=Sheets("CONSULTA").Range("D34:I35"), CopyToRange:=Sheets("CONSULTA").Range("B40:K40"), Unique:= _ 
     False 
    Sheets("CONSULTA").Range("F37").Select 

End Sub 

Czy to właściwy sposób? Zrobiłem wiele badań, ale nie mogłem znaleźć nikogo z tym samym problemem z filtrem zaawansowanym, ponieważ nie wiem, czy można osiągnąć to, co chcę.

+0

Odblokowane komórki są, no * * odblokowane *, gdy arkusz jest chroniony. Jeśli chcesz, aby użytkownik NIE mógł manipulować formułami, potrzebujesz tych komórek zablokowanych. Co robi 'LimparAntes'? –

+0

@ Mat'sMug Przepraszam, już to poprawiłem. Mam komórki, które muszą zostać odblokowane, aby użytkownik mógł zmienić tam wartość. 'LimparAntes' to nazwa subu, który wywołuje mój filtr zaawansowany, aby przeszukać moje kryteria. Ja także zredagowałem pytanie z jego kodem. – paulinhax

+1

Czy plik * skoroszytu * jest również chroniony? –

Odpowiedz

5

Czy to cały kod?

Tylko patrząc na kod bez wykonywania go, pierwsze kroki powinny być, aby odblokować/odbezpieczyć wszystkie arkusze, wykonując:

Dim wks As Worksheet 

For Each wks In ActiveWorkbook.Worksheets 
    wks.Unprotect "Password" 
Next 

Następnie po zakończeniu należy uruchomić LimparAntes(). To spowoduje skopiowanie/przefiltrowanie potrzebnych danych. I w końcu powinieneś zablokować arkusze.

Private Sub Filtrar_Click() 

Dim wks As Worksheet 

For Each wks In ActiveWorkbook.Worksheets 
    wks.Unprotect "Password" 'Unprotect all sheets first 
Next 

Call LimparAntes  'Call filter sub 

For Each wks In ActiveWorkbook.Worksheets 
    wks.Protect "Password", UserInterfaceOnly:=True  'Re-Protect all sheets 
Next 

End Sub 

Spróbuj tego i zobacz, czy usuwa błąd. Jeśli nie, przeczytałem, że ustawienie właściwości autofiltra na wartość True przed zablokowaniem arkusza może być korzystne.

+0

Przepraszamy za dużo czasu, aby to sprawdzić, ale zadziałało! Dziękuję bardzo, nie zauważyłem, że powinienem powtórzyć cały kod ponownie, to była moja wątpliwość. – paulinhax