【问题标题】:excel: advanced filter with protected sheetexcel:带有受保护工作表的高级过滤器
【发布时间】:2017-12-03 11:52:06
【问题描述】:

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

此外,我想保护工作表,因为我在单元格上有一些人们不应该更改的公式,但我也有用户应该提供一些信息的单元格,然后我已经像你一样解锁了这些单元格可以看下面:

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

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

所以我将此代码关联到我的“过滤器”按钮:

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 在做什么?
  • @Mat'sMug 抱歉,我已经更正了。我有需要解锁的单元格,用户可以在那里更改值。 LimparAntes 是调用我的高级过滤器来搜索我的条件的子名称。我还用它的代码编辑了这个问题。
  • 工作簿是否也受到保护?
  • 如果@Mat 关于 workbook 的问题的答案是否定的,问题可能是您当时保护和取消保护一张纸,但 LimparAntes 需要 2完成工作的工作表:Sheets("AUX")Sheets("CONSULTA"),其中一张将始终受到保护
  • 是的,在我开始测试我的代码之前,工作表已经受到保护。我试着只锁定一张纸,但也没有用。

标签: vba excel


【解决方案1】:

这就是所有的代码吗?

仅查看代码而不执行它,第一步应该是通过以下操作解锁/取消保护所有工作表:

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 可能是有益的。

【讨论】:

  • 很抱歉花了很长时间检查它,但它成功了!非常感谢,我没有注意到我应该再次重复完整的代码,这是我的疑问。
猜你喜欢
  • 1970-01-01
  • 2020-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多