2017-06-29 17 views
6

私は、このブックを使用してアドバンスフィルタを使用して、ブック内の別のシート内の情報を検索します。excel:保護されたシートを使用した高度なフィルタ

さらに、セルにいくつかの数式を入れて、変更できないようにする必要があるため、シートを保護したいと思いますが、ユーザーに情報が必要なセルもあります。あなたは以下を参照することができます:

enter image description here

問題がある、私は私が私の「フィルタ」ボタンをクリックしたときに、私の高度なフィルタを実行しようとします。

高度なフィルタは保護されたシートでは実行できません。

は、だから、私は「フィルタ」ボタンにこのコードを関連付けられている:

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 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 

これは正しい方法ですか?私は多くの研究をしましたが、私はAdvanced Filterと同じ問題を抱える人を見つけることができませんでした。私が望むものを達成することが可能かどうかはわかりません。

+0

シートが保護されている場合、ロックされていないセルは、*ロックされていません。ユーザーが数式を改ざんできないようにするには、これらのセルをロックする必要があります。 「LimparAntes」は何をしていますか? –

+0

@ Mat'sMug申し訳ありませんが、私はすでにそれを修正しました。私は、ユーザーのためにロックされる必要があるセルに値を変更することができます。 'LimparAntes'は私の条件を検索するために私の高度なフィルターを呼び出すサブの名前です。私はそのコードで質問を編集しました。 – paulinhax

+1

*ワークブックも保護されていますか? –

答えて

5

これはすべてコードですか?

ちょうどそれを実行せずに、コードを見てから、最初のステップは実行してすべてのシートを/アンロック保護を解除する必要があります:

Dim wks As Worksheet 

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

次に完了時に、あなたはLimparAntesを実行する必要があります()。その後、必要なデータをコピー/フィルタリングします。最後にシートをロックする必要があります。

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 

これを試して、エラーを削除するかどうかを確認してください。もしそうでなければ、私はシートをロックする前にオートフィルタプロパティをTrueに設定することが有益かもしれないと読んだ。

+0

申し訳ありませんが、チェックするのに時間がかかりましたが、機能しました!そんなにありがとう、私はもう一度完全なコードを繰り返さなければならないことに気がつかなかった、それは疑いの余地だった。 – paulinhax

関連する問題