Excel:受保护工作表的高级筛选

6
我有一张表格,我使用高级筛选器在工作簿中的另一个表格中搜索信息。
此外,我想保护工作表,因为我在单元格中使用了一些公式,人们不应该能够更改,但我也有一些需要用户提供信息的单元格,因此我已经解锁了这些单元格,如下所示:

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

这是正确的做法吗?我做了很多研究,但我找不到任何一个遇到高级筛选器与我有同样问题的人,所以我甚至不知道是否可能实现我想要的。


当工作表被保护时,未锁定的单元格是可以编辑的。如果您不希望用户更改公式,那么您需要锁定这些单元格。LimparAntes 是做什么用的? - Mathieu Guindon
@Mat'sMug 抱歉,我已经纠正了。我有一些需要解锁的单元格,以便用户可以更改其中的值。LimparAntes是调用我的高级筛选器搜索标准的子程序的名称。我还编辑了问题并附上了代码。 - paulinhax
1
工作簿也被保护了吗? - Mathieu Guindon
如果对@Mat关于_workbook_的问题的答案是否定的话,那么问题可能是您一次只保护和取消保护一个工作表,但是LimparAntes需要2个工作表才能完成工作:Sheets("AUX")Sheets("CONSULTA"),其中一个始终会受到保护。 - paul bica
是的,在我开始测试代码之前,这些工作表已经被保护了。我尝试锁定一个工作表,但也没有起作用。 - 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可能会有帮助。

很抱歉花了这么长时间来检查,但是它起作用了!非常感谢你,我没有注意到我应该再次重复完整的代码,这就是我的疑问。 - paulinhax

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接