Excel 2013 VBA ThisWorkBook BeforeClose事件不识别方法

我试图在我的工作簿的ThisWorkbook模块中写入WorkBook_BeforeClose事件,删除所有validation下拉列表,并重置每个页面上的所有filter。

当我尝试closures工作簿时,此代码运行:

Sub Workbook_BeforeClose(Cancel As Boolean) Dim ws As Worksheet For Each ws In Worksheets .SpecialCells(xlCellTypeAllValidation).Delete .ShowAllData Next End Sub 

我得到一个“编译错误:无效或无限制的引用”与“.SpecialCells”突出显示。 如果我注释掉这一行,则会突出显示与“.ShowAllData”相同的错误。

我已经检查了多个Web引用的拼写和语法,这一切似乎都是有效的。 我做了什么错误或遗漏?

1-你没有一个集团,所以你不能使用一个点. 没有明确的资格对象

2- SpecialCells不是Worksheet的成员,而是Range的成员,所以您需要在工作表的Cells对象上调用它。

3-删除validation但保留单元格的值,您需要删除validation,但不是范围本身

4-在删除过滤之前检查AutofilterMode ,并使用.autofilter带参数的.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事件可能不是您的任务的适当事件,因为更改(删除了validation和自动筛选)不一定会被保存。 您可以考虑使用Workbook_BeforeSave事件。