excel: filter avanzato con foglio protetto

Ho questo foglio in cui uso Advanced Filter per cercare informazioni all'interno di un altro foglio nella mia cartella di lavoro.

Inoltre, voglio proteggere il foglio perché ho alcune formule sulle cellule che le persone non dovrebbero essere in grado di cambiare, ma ho anche delle celle che l'utente dovrebbe venire con alcune informazioni, poi ho già sbloccato queste celle come puoi vedere di seguito :

immettere qui la descrizione dell'immagine

Il problema è quando tento di eseguire il mio filter avanzato quando faccio clic sul button "Filtro". Ho un messaggio di errore che dice:

Il filter avanzato non può essere eseguito in Foglio protetto.

Così ho associato questo codice al mio button "Filtro":

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 

Il sub LimparAntes è la routine che chiama Filtro avanzato, ma ho ancora lo stesso errore, quindi sono in dubbio. Il codice è sotto:

 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 Sub LimparAntes () 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 LimparAntes Macro 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 Dim Lastrow As Long 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 Lastrow = Sheets ("AUX") Range ("A" e righe.Count) .End (xlUp) .Row 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 Fogli ("AUX") Gamma ("A1: K" & Lastrow) .Avante azione avanzata: = xlFilterCopy, _ 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 Intervallo ("D34: I35"), CopyToRange: = fogli ("CONSULTA"). Range ("B40: K40"), Unico: = _ 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 

È questo il modo corretto di farlo? Ho fatto molta ricerca, ma non ho trovato nessuno con lo stesso problema con il filter avanzato come io così non so nemless se è ansible get quello che voglio.

Tutto questo è il codice?

Appena guardando il codice senza eseguirlo, i primi passi dovrebbero essere per sbloccare / eliminare tutti i fogli facendo:

 Dim wks As Worksheet For Each wks In ActiveWorkbook.Worksheets wks.Unprotect "Password" Next Dim wks come foglio di lavoro Dim wks As Worksheet For Each wks In ActiveWorkbook.Worksheets wks.Unprotect "Password" Next Per each settimana in ActiveWorkbook.Worksheets Dim wks As Worksheet For Each wks In ActiveWorkbook.Worksheets wks.Unprotect "Password" Next wks.Unprotect "Password" Dim wks As Worksheet For Each wks In ActiveWorkbook.Worksheets wks.Unprotect "Password" Next 

Quindi al termine, dovresti eseguire LimparAntes (). Quindi copia / filtra i dati necessari. E poi finalmente dovresti bloccare i fogli.

 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 Private Sub Filtrar_Click () 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 Dim wks come foglio di lavoro 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 Per each settimana in ActiveWorkbook.Worksheets 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 wks.Unprotect "Password" 'Proteggi tutti i fogli prima 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 Chiama LimparAntes 'Filtro chiamata sub 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 Per each settimana in ActiveWorkbook.Worksheets 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 wks.Protect "Password", UserInterfaceOnly: = True 'Re-Protect tutti i fogli 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 

Prova questo e vedi se rimuove l'errore. In caso contrario, ho letto che impostare la properties; autofilter su True prima di bloccare il foglio potrebbe essere utile.