![](/img/trans.png)
[英]CommandBars(“Ply”) won't reset on workbook beforeclose VBA Excel
[英]Excel VBA filter reset works in Immediate window but not in Sub BeforeClose
在工作簿關閉之前,我編寫了以下代碼來重置所有驗證和/或自動過濾功能:
Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
Worksheets("Query").Cells.SpecialCells(xlCellTypeAllValidation).Clear
On Error Resume Next
Worksheets("Table").Cells.SpecialCells(xlCellTypeAllValidation).Clear
On Error Resume Next
Worksheets("Table").ShowAllData
On Error Resume Next
Worksheets("Query").Activate
ThisWorkbook.Save
End Sub
但是,“ Worksheets(“ Table”)。ShowAllData”似乎僅在立即窗口中起作用。 當我在過濾表格“表格”上的表格后關閉程序並再次打開它時,我得到
We found a problem with some content in "Book1.xlsm". Do you want us to try to recover as much as we can? If you trust the source of this workbook, click Yes.
最初沒有發生這種情況,似乎沒有原因。 為什么篩選器重置在立即窗口中起作用,但在我的子例程中卻不起作用? 我該如何解決?
永遠不要使用On Error Resume Next
否則您將永遠學不到任何東西
您需要先檢查一下是否Autofilter
器,因為這是一個切換...
If ActiveSheet.FilterMode Then
ActiveSheet.ShowAllData
End If
要么
If ActiveSheet.FilterMode Then
ActiveSheet.AutoFilterMode = False
End If
不需要有太多On Error Resume Next
OERN。 只有一個會做。
我試過了
Sub Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
Worksheets("Query").Cells.SpecialCells(xlCellTypeAllValidation).Clear
Worksheets("Table").Cells.SpecialCells(xlCellTypeAllValidation).Clear
On Error GoTo 0
If Worksheets("Table").FilterMode Then Worksheets("Table").ShowAllData
Worksheets("Query").Activate
ThisWorkbook.Save
DoEvents
End Sub
而且我沒有得到任何錯誤。 試試吧。
我們發現“ Book1.xlsm”中的某些內容存在問題。 您是否希望我們盡力恢復原狀? 如果您信任此工作簿的來源,請單擊“是”。
如果仍然出現錯誤,則不是因為這段代碼。 您需要查看有關已修復內容的報告。 我覺得您的DataValidation
列表之一導致了此問題。 就像我說的,檢查維修報告。 如果報告說Datavalidation
已修復,那么您需要檢查一下。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.