excel:带有受保护工作表的高级过滤器

时间:2017-06-29 16:49:37

标签: excel vba excel-vba

我有这张工作表,我使用高级过滤器来搜索工作簿中另一张工作表内的信息。

另外,我想保护工作表,因为我在单元格上有一些人们不应该改变的公式,但我也有用户应该提供一些信息的单元格,然后我已经解锁了这些单元格如下所示:

enter image description here

当我点击我的"过滤器"当我尝试运行我的高级过滤器时,问题是按钮。我收到一条错误消息:

  

高级过滤器无法在受保护的工作表中运行。

所以我将此代码与我的" 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 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有同样问题的人,所以我甚至不知道是否有可能达到我的目的。

1 个答案:

答案 0 :(得分: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

试试这个,看看它是否删除了错误。如果没有,我已经读过在锁定工作表之前将autofilter属性设置为True可能是有益的。