我正在尝试在我的工作簿的ThisWorkbook模块中编写一个WorkBook_BeforeClose事件,该模块将删除所有验证下拉列表并重置每个页面上的所有过滤器。
当我尝试关闭工作簿时,此代码运行:
chronological order
我得到一个'编译错误:无效或不合格的引用',突出显示“.SpecialCells”。如果我注释掉那一行,我会突出显示'.ShowAllData'时出现同样的错误。
我已经针对多个Web引用检查了拼写和语法,这一切似乎都有效。我做错了什么或省略了什么?
答案 0 :(得分:1)
1-您没有With
集团,因此如果没有对象的明确限定,您就无法使用点.
2- SpecialCells
不是Worksheet
的成员,而是Range
的成员,因此您需要在工作表的Cells
对象上调用它。
3-删除验证但保留单元格的值,您需要删除验证但不删除范围本身
4-在删除过滤之前检查AutofilterMode
,并使用不带参数的.autofilter
将其删除。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
If ws.AutoFilterMode Then ws.Cells.AutoFilter ' <-- remove autofilters
ws.Cells.Validation.Delete ' <-- removes validation, not the content
Next
End Sub
5-最后,Workbook_BeforeClose
事件可能不适合您的任务,因为不一定会保存更改(已删除验证和自动过滤器)。您可以考虑使用Workbook_BeforeSave
事件。