pau*_*hax 6 excel vba excel-vba
我有这张表,我使用高级过滤器来搜索工作簿中另一张表内的信息.
另外,我想要保护工作表,因为我在单元格上有一些人们不应该改变的公式,但我也有用户应该提供一些信息的单元格然后我已经解锁了这些单元格,如下所示:
问题是当我单击"过滤器"按钮时尝试运行高级过滤器.我收到一条错误消息:
高级筛选器无法在受保护的工作表中运行.
所以我将此代码与我的"过滤器"按钮相关联:
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
Run Code Online (Sandbox Code Playgroud)
该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
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?我已经做了很多研究,但我找不到任何与高级过滤器有同样问题的人,所以我甚至不知道是否有可能实现我想要的.
小智 5
这是所有的代码吗?
只需查看代码而不执行它,第一步应该是通过执行以下操作来解锁/取消保护所有工作表:
Dim wks As Worksheet
For Each wks In ActiveWorkbook.Worksheets
wks.Unprotect "Password"
Next
Run Code Online (Sandbox Code Playgroud)
完成后,您应该运行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
Run Code Online (Sandbox Code Playgroud)
试试这个,看看它是否删除了错误.如果没有,我已经读过在锁定工作表之前将autofilter属性设置为True可能是有益的.