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

时间:2017-06-09 18:29:27

标签: excel vba excel-vba

我正在尝试在我的工作簿的ThisWorkbook模块中编写一个WorkBook_BeforeClose事件,该模块将删除所有验证下拉列表并重置每个页面上的所有过滤器。

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

chronological order

我得到一个'编译错误:无效或不合格的引用',突出显示“.SpecialCells”。如果我注释掉那一行,我会突出显示'.ShowAllData'时出现同样的错误。

我已经针对多个Web引用检查了拼写和语法,这一切似乎都有效。我做错了什么或省略了什么?

1 个答案:

答案 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事件。