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